MS SQL存储过程使用ODBC返回结果集

时间:2009-02-05 01:58:26

标签: c++ sql sql-server stored-procedures odbc

我有一个存储过程,如果存储过程执行此操作:

SELECT 0 As Ret
DELETE FROM table where value1 = 1

返回1行结果,其值为0,列名为Ret

但如果我这样做:

DELETE FROM table where value1 = 1
SELECT 0 As Ret

我没有得到退回的结果。

我的问题是,如何让第二个变体返回一个值。

我正在使用C ++和ODBC。

4 个答案:

答案 0 :(得分:3)

请参阅 - SET NOCOUNT。

的设置

答案 1 :(得分:1)

将变量显式设置为@@ RowCount,然后将其返回

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

修改

它为第二种形式返回0,因为选择0作为ret的行数是0行。因此,您需要存储删除后立即返回的行数。

答案 2 :(得分:1)

shahkalpesh是对的,nocount应该适用于此,但我建议不要使用结果集作为返回值,而是使用RETURN语句,并询问proc的返回值。

SET NOCOUNT ON 
DELETE FROM table where value1 = 1
SET NOCOUNT OFF
SELECT 0 As Ret

答案 3 :(得分:0)

好的,我发现你可以使用ODBC调用SQLMoreResults来获取下一个结果集。因此,您可以继续调用此SQLMoreResults函数,直到不再有结果集为止。

在我的情况下,在调用SQLMoreResults后,我得到了我预期的结果集。

这很酷,因为这意味着单个存储过程可以返回多个结果集。我从来不知道它可以。

@ Sambo99和@shakalpesch你的建议也有效,只返回1个结果。