我是否必须包括" SELECT @@ RowCount"如果我有多个SQL语句?

时间:2016-05-24 14:47:50

标签: sql sql-server tsql rowcount

我知道,如果我执行一个更新或删除某些数据的SQL语句,它将返回受影响的行数。

但是如果我在sql脚本中有多个SQL语句,并且我想知道从上一个语句执行的影响的行数,它仍会自动返回,或者我是否需要

SELECT @@RowCount

在脚本的末尾?

有问题的代码不是存储过程。相反,它是存储在任意位置的参数化SQL脚本,使用实体框架中的ExecuteStoreCommand函数执行,如:

var numberOfRowsAffected = context.ExecuteStoreCommand<int>(mySqlScript, parameters);

3 个答案:

答案 0 :(得分:1)

执行你的查询(y / ies)时,它取决于NOCOUNT设置。

如果NOCOUNTON,则不会返回DONE_IN_PROC条消息。

如果NOCOUNTOFF,则会返回默认设置,然后返回DONE_IN_PROC条消息(例如,计数)。

这两种情况都与执行不同,

SELECT @@ROWCOUNT;

将返回具有单个标量值的结果集,与DONE_IN_PROC消息不同。无论NOCOUNT

的设置如何,都会发生这种情况

我认为SELECT @@ROWCOUNT有时用于使实体框架“玩”更复杂的TSQL语句,因为EF都需要

  1. 需要计算帖子验证
  2. 并接受标量数字结果集作为DONE_IN_PROC消息的替代。
  3. 重要的是SELECT @@ROWCOUNT;在最后一个查询语句之后立即执行,因为许多语句将重置@@ROWCOUNT,因此会产生意外结果。

答案 1 :(得分:0)

为了具体回答部分,您需要添加SELECT @@ RowCount以返回受上一个语句影响的行数。

我认为混淆可能是由于在执行查询时在SSMS窗口中返回的行。默认SSMS显示所有sql语句返回的行数,但它将受影响的行作为消息返回而不是数据集。 / p>

答案 2 :(得分:-1)

@@ ROWCOUNT将自动返回上一个语句影响的行数。

请在此处找到msdn链接 https://msdn.microsoft.com/en-us/library/ms187316.aspx