繁体   English   中英

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

[英]Do I have to include “SELECT @@RowCount” if I have more than one SQL statement?

我知道,如果执行一条执行UPDATE或DELETEs数据的SQL语句,它将返回受影响的行数。

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

SELECT @@RowCount

在脚本末尾?

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

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

这取决于执行查询时的NOCOUNT设置。

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

如果NOCOUNTOFFDONE_IN_PROC默认设置,然后将返回DONE_IN_PROC消息(例如计数)。

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

SELECT @@ROWCOUNT;

它将返回具有单个标量值的结果集,该结果集不同于DONE_IN_PROC消息。 无论NOCOUNT的设置如何,都会发生这种情况。

我相信SELECT @@ROWCOUNT有时用于使实体框架与更复杂的TSQL语句一起“播放”,因为EF都需要

  1. 需要计数才能进行后期验证
  2. 并且将接受标量数字结果集来替代DONE_IN_PROC消息。

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

仅在回答部分上是特定的,您将需要添加SELECT @@ RowCount以返回受last语句影响的行数。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM