我知道,如果我执行一条对UPDATE或DELETEs数据进行更新的SQL语句,它将返回受影响的行数。
但是,如果我在一个sql脚本中有多个SQL语句,并且我想知道最后执行的语句影响的行数,它是否仍会自动返回该行,或者我是否需要
SELECT @@RowCount
在脚本的末尾?
有问题的代码不是存储过程。相反,它是一个存储在任意位置的参数化SQL脚本,使用ExecuteStoreCommand
Entity Framework中的函数执行,如下所示:
var numberOfRowsAffected = context.ExecuteStoreCommand<int>(mySqlScript, parameters);
这取决于NOCOUNT
执行查询时的设置。
如果NOCOUNT
为,ON
则不会DONE_IN_PROC
返回任何消息。
如果NOCOUNT
是OFF
默认设置,则将DONE_IN_PROC
返回消息(例如计数)。
这两种情况都与执行不同,
SELECT @@ROWCOUNT;
它将返回一个具有单个标量值的结果集,该结果集不同于DONE_IN_PROC消息。无论的设置如何,都会发生这种情况NOCOUNT
。
我相信,SELECT @@ROWCOUNT
有时这会使Entity Framework与更复杂的TSQL语句一起“发挥作用”,因为EF都需要
DONE_IN_PROC
消息。重要的SELECT @@ROWCOUNT;
是在最后一条查询语句之后立即执行,因为许多语句将重置@@ROWCOUNT
并因此产生意外的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句