我有一個存儲過程,如果存儲過程做到這一點:MS SQL存儲過程返回的結果集與ODBC
SELECT 0 As Ret
DELETE FROM table where value1 = 1
返回一行數據,其0和列名值懲戒
但導致如果我這樣做:
DELETE FROM table where value1 = 1
SELECT 0 As Ret
我沒有得到任何結果。
我的問題是,我如何得到第二個變化返回一個值。
我正在使用C++和ODBC。
我有一個存儲過程,如果存儲過程做到這一點:MS SQL存儲過程返回的結果集與ODBC
SELECT 0 As Ret
DELETE FROM table where value1 = 1
返回一行數據,其0和列名值懲戒
但導致如果我這樣做:
DELETE FROM table where value1 = 1
SELECT 0 As Ret
我沒有得到任何結果。
我的問題是,我如何得到第二個變化返回一個值。
我正在使用C++和ODBC。
好的我發現你可以使用ODBC調用SQLMoreResults來獲得下一個結果集。因此,您可以繼續調用此SQLMoreResults函數,直到沒有更多結果集爲止。
在我調用SQLMoreResults之後,我得到了預期的結果集。
這非常酷,因爲它意味着單個存儲過程可以返回多個結果集。我從來不知道它可以。
@ Sambo99和@shakalpesch你的建議也有效,並且只返回1個結果。
明確設置變量@@行數,然後返回它
Declare @ret int
Select @ret = @@RowCount
Select @ret
編輯
它返回0,第二個形式,因爲該行數選擇0爲RET是0行。因此,您需要存儲刪除後立即返回的行數。
請參閱設置 - SET NOCOUNT。
shahkalpesh是正確的,nocount應該爲此工作,但我會建議不使用結果集作爲返回值,而是使用RETURN語句,並詢問proc的返回值。
SET NOCOUNT ON
DELETE FROM table where value1 = 1
SET NOCOUNT OFF
SELECT 0 As Ret
我不認爲你理解這個問題。它在第二種情況下沒有返回行。問題是先刪除然後再選擇。它永遠不會返回給我一個結果集。 – 2009-02-05 02:19:47
我真的希望它在第二種情況下返回0。 (因此SELECT 0 As Ret)但問題是它沒有返回任何東西。 – 2009-02-05 02:21:00
對不起,我以爲你關心的是操縱@@ RowCount值。您提供的兩種變體都會返回結果(執行後可以使用不同的@@ Rowcount值)。也許你可以分享更多的代碼,你沒有收到價值。 – cmsjr 2009-02-05 02:51:11