我有一个存储过程,如果存储过程执行此操作:
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。
答案 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个结果。