2009-02-05 117 views
0

我有一個存儲過程,如果存儲過程做到這一點: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。

回答

0

好的我發現你可以使用ODBC調用SQLMoreResults來獲得下一個結果集。因此,您可以繼續調用此SQLMoreResults函數,直到沒有更多結果集爲止。

在我調用SQLMoreResults之後,我得到了預期的結果集。

這非常酷,因爲它意味着單個存儲過程可以返回多個結果集。我從來不知道它可以。

@ Sambo99和@shakalpesch你的建議也有效,並且只返回1個結果。

1

明確設置變量@@行數,然後返回它

Declare @ret int 
Select @ret = @@RowCount 
Select @ret 

編輯

它返回0,第二個形式,因爲該行數選擇0爲RET是0行。因此,您需要存儲刪除後立即返回的行數。

+0

我不認爲你理解這個問題。它在第二種情況下沒有返回行。問題是先刪除然後再選擇。它永遠不會返回給我一個結果集。 – 2009-02-05 02:19:47

+0

我真的希望它在第二種情況下返回0。 (因此SELECT 0 As Ret)但問題是它沒有返回任何東西。 – 2009-02-05 02:21:00

+0

對不起,我以爲你關心的是操縱@@ RowCount值。您提供的兩種變體都會返回結果(執行後可以使用不同的@@ Rowcount值)。也許你可以分享更多的代碼,你沒有收到價值。 – cmsjr 2009-02-05 02:51:11

1

shahkalpesh是正確的,nocount應該爲此工作,但我會建議不使用結果集作爲返回值,而是使用RETURN語句,並詢問proc的返回值。

SET NOCOUNT ON 
DELETE FROM table where value1 = 1 
SET NOCOUNT OFF 
SELECT 0 As Ret 
相關問題