代码之家  ›  专栏  ›  技术社区  ›  Brian R. Bondy

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

  •  0
  • Brian R. Bondy  · 技术社区  · 17 年前

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

    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 回复  |  直到 17 年前
        1
  •  3
  •   shahkalpesh    17 年前

    请参阅-SET NOCOUNT的设置。

        2
  •  1
  •   cmsjr    17 年前

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

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

    对于第二个表单,它返回0,因为选择0作为ret的行数是0行。因此,您需要存储删除后立即返回的行数。

        3
  •  1
  •   Sam Saffron James Allen    17 年前

    shahkalpesh是对的,nocount应该可以实现这一点,尽管我建议不要使用结果集作为返回值,而是使用return语句,并询问proc的返回值。

    SET NOCOUNT ON 
    DELETE FROM table where value1 = 1
    SET NOCOUNT OFF
    SELECT 0 As Ret
    
        4
  •  0
  •   Brian R. Bondy    17 年前

    在我的例子中,在调用SQLMoreResults之后,我得到了预期的结果集。

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

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