我知道,如果我执行一个更新或删除某些数据的SQL语句,它将返回受影响的行数。
但是如果我在sql脚本中有多个SQL语句,并且我想知道从上一个语句执行的影响的行数,它仍会自动返回,或者我是否需要
SELECT @@RowCount
在脚本的末尾?
有问题的代码不是存储过程。相反,它是存储在任意位置的参数化SQL脚本,使用实体框架中的ExecuteStoreCommand
函数执行,如:
var numberOfRowsAffected = context.ExecuteStoreCommand<int>(mySqlScript, parameters);
答案 0 :(得分:1)
执行你的查询(y / ies)时,它取决于NOCOUNT
设置。
如果NOCOUNT
为ON
,则不会返回DONE_IN_PROC
条消息。
如果NOCOUNT
为OFF
,则会返回默认设置,然后返回DONE_IN_PROC
条消息(例如,计数)。
这两种情况都与执行不同,
SELECT @@ROWCOUNT;
将返回具有单个标量值的结果集,与DONE_IN_PROC消息不同。无论NOCOUNT
。
我认为SELECT @@ROWCOUNT
有时用于使实体框架“玩”更复杂的TSQL语句,因为EF都需要
DONE_IN_PROC
消息的替代。重要的是SELECT @@ROWCOUNT;
在最后一个查询语句之后立即执行,因为许多语句将重置@@ROWCOUNT
,因此会产生意外结果。
答案 1 :(得分:0)
为了具体回答部分,您需要添加SELECT @@ RowCount以返回受上一个语句影响的行数。
我认为混淆可能是由于在执行查询时在SSMS窗口中返回的行。默认SSMS显示所有sql语句返回的行数,但它将受影响的行作为消息返回而不是数据集。 / p>
答案 2 :(得分:-1)
@@ ROWCOUNT将自动返回上一个语句影响的行数。
请在此处找到msdn链接 https://msdn.microsoft.com/en-us/library/ms187316.aspx