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

Do I have to include "SELECT @@RowCount" if I have more than one SQL statement?

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

但是如果我在 sql 脚本中有多个 SQL 语句,并且我想知道 从最后执行的语句中受影响的行数, 它仍然会 return 自动,还是我需要一个

SELECT @@RowCount

在脚本结尾?

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

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

@@ROWCOUNT 将自动 return 受最后一条语句影响的行数。

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

只是为了具体回答部分,您需要将 SELECT @@RowCount 添加到 return 受最后一条语句影响的行数。

我认为混淆可能是由于在执行 query.By 时在 SSMS window 中编辑了 return 行 query.By 默认 SSMS 显示所有 [=19] 的行数 return =] 语句,但它 return 影响行,因为消息不是 数据集

这取决于执行你的 quer(y/ies) 时的 NOCOUNT 设置。

如果 NOCOUNTON,则 DONE_IN_PROC 条消息将不会被 return 编辑。

如果 NOCOUNT 是默认设置 OFF,则 DONE_IN_PROC 条消息将被 return 编辑(例如计数)。

这两种情况与执行不同,

SELECT @@ROWCOUNT;

这将 return 具有单个标量值的结果集,不同于 DONE_IN_PROC 消息。无论 NOCOUNT.

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

我相信 SELECT @@ROWCOUNT 有时用于使 Entity Framework "play" 具有更复杂的 TSQL 语句,因为 EF 都需要

  1. 需要计数以进行 post 验证
  2. 并将接受标量数字结果集作为 DONE_IN_PROC 消息的替代。

在最后一个查询语句之后立即执行 SELECT @@ROWCOUNT; 很重要,因为许多语句会重置 @@ROWCOUNT 并因此产生意外结果。