如何在sql中返回受影响的最后一个查询的记录数

时间:2015-04-21 12:05:54

标签: c# sql asp.net

在我的存储过程中,我使用了2个insert语句。当我执行sp时 使用executenonquery(),它返回受2语句影响的行数。 假设查询1影响的行数为2,查询2影响的行数为3.它返回5.我想要最后查询的结果。这只是3。如何做?

1 个答案:

答案 0 :(得分:2)

根据您的需要,您有两种选择。

首先,您可以在插入语句之间切换NOCOUNT设置,以便忽略您不感兴趣的插入的计数:

ALTER PROCEDURE [dbo].[spFoo]

AS
BEGIN

set nocount on
    insert into test values (1, 'a')
    insert into test values (2, 'b')
set nocount off 
    insert into test values (3, 'c')


END

使用ExecuteNonQuery调用时,返回1。

或者,您可以使用@@ROWCOUNT获取受上一次插入影响的行数。您可以选择返回并使用ExecuteScalar来获得C#中的结果:

ALTER PROCEDURE [dbo].[spFoo]

AS
BEGIN

    insert into test values (1, 'a')
    insert into test values (2, 'b')
    insert into test values (3, 'c')

    select @@ROWCOUNT
END

在这种情况下,您需要转换结果,因为ExecuteScalar的返回值为object

int affected = (int)command.ExecuteScalar();