2009-02-05 86 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 
相关问题