2010-11-11 62 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返回集中最後一行的值。