我有一个存储过程,如果存储过程做到这一点: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