2010-11-11 68 views

回答

0

我用下面的代码来调用存储过程并检索它的返回值。该代码创建一个临时存储过程,它接受两个输入参数并通过返回值返回它们的总和。如果存储过程执行查询,请确保在尝试访问返回值之前通过sqlsrv_next_result处理所有可用的结果。

我希望这些信息能够帮助你..

代码如下:

$conn = sqlsrv_connect('.\SQLExpress', array('Database'=>'Northwind')); 

$sql = "CREATE PROCEDURE #ReturnParam (@p1 int, @p2 int) AS 
     RETURN @p1 + @p2"; 
$stmt = sqlsrv_query($conn, $sql); 

$sql = '{? = CALL #ReturnParam(?, ?)}'; 
$returnVariable = -1; 
$inputVariable1 = 18; 
$inputVariable2 = 24; 

$params = array(array($returnVariable, SQLSRV_PARAM_OUT), 
       array($inputVariable1, SQLSRV_PARAM_IN), 
       array($inputVariable2, SQLSRV_PARAM_IN)); 

$stmt = sqlsrv_query($conn, $sql, $params); 

echo "Return value: ".$returnVariable; 
+0

你可以举一个例子,你正在调用一个现有的存储过程吗?我正在使用osql来执行它。 – chama 2010-11-11 20:27:40

+0

另外,这是PHP吗?我使用Windows外壳,所以我不知道PHP会帮助我。 – chama 2010-11-11 20:35:41

+0

好吧,明天我会提供一些C# – 2010-11-12 00:55:06

0

如果你正在处理的SQL 2005及以上版本,请尝试使用SQLCMD代替。

检查了所有它提供了你可以使用脚本使用的好东西: MSDN Page for sqlcmd command

2

在windows CMD外壳,这可以用在SQLCMD调用来完成FOR循环。通常只有当查询返回1条记录时。

FOR /F %%A IN ('sqlcmd <query paramters>') DO SET MYCMDVARIABLE=%%A 

它可以配置为多列,但会始终返回SQL返回集中最后一行的值。