2011-08-29 117 views
1

有沒有辦法將sqlsrv_num_rows()與存儲過程一起使用?存儲過程和sqlsrv_num_rows - 光標錯誤?

基本上當我嘗試使用此功能,我收到這些錯誤之一,這取決於光標i電源:

Array ([0] => Array ([0] => IMSSP [SQLSTATE] => IMSSP [1] => -50 [code] => -50 [2] => This function only works with statements that have static or keyset scrollable cursors. [message] => This function only works with statements that have static or keyset scrollable cursors.)) 

Array ([0] => Array ([0] => 01000 [SQLSTATE] => 01000 [1] => 16954 [code] => 16954 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]Executing SQL directly; no cursor. [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]Executing SQL directly; no cursor.) [1] => Array ([0] => 01S02 [SQLSTATE] => 01S02 [1] => 0 [code] => 0 [2] => [Microsoft][SQL Server Native Client 10.0]Cursor type changed [message] => [Microsoft][SQL Server Native Client 10.0]Cursor type changed)) 

我花了一些時間嘗試尋找這個問題的解決方案,但沒有運氣。

如何從使用SqlSrv的存儲過程獲取行計數?我將不得不手動循環遍歷結果和$ count ++;我想避免這種情況。或者,有什麼辦法可以改變實際的存儲過程來包含光標?我對遊標不是很熟悉,所以我不知道這是否是解決方案。

預先感謝您!

回答

1

看到這個:sqlsrv_num_rows() with stored procedures似乎沒有什麼比解決辦法。

您可以在過程中捕獲@@ ROWCOUNT並將其作爲OUTPUT參數返回。

CREATE PROCEDURE YourProc 
(
    @param1 int 
    ,@param2 varchar(5) 
    ,@rowCountOf int OUTPUT 
) 
AS 

SELECT * FROM TABLE WHERE ... --returns result set 
SET @[email protected]@ROWCOUNT  --set output variable to be the row count 
return 0 
GO 

或者您可以使用sp_executesql代替上述鏈接中所述。

+0

太棒了,我認爲這可能只是工作。謝謝! – tcarter2005