执行if @@ rowcount> 0将@@ rowcount重置为0.为什么?

use*_*769 11 t-sql

链接

@@ Rowcount用于通知最后一个select,insert,update或delete语句受影响的行数

declare @row int select 100 if @@rowcount>0  set @row=@@rowcount ...
Run Code Online (Sandbox Code Playgroud)

以上将返回0,因为一旦if @@rowcount>0执行它将重置为0,因为它不返回任何行.所以总是先分配给变量

为什么语句if @@rowcount>0重置@@rowcount为0?是否 @@rowcount仅受select,insert,update和delete语句的影响?

谢谢

gbn*_*gbn 12

它受最后一个声明的影响.像这个SET语句

Declare @row int
select 100 union all select 200 union all select 300
set @row = @@rowcount;
SELECT @row, @@rowcount
Run Code Online (Sandbox Code Playgroud)

如果您阅读MSDN上实际Microsoft SQL Server文档,则会提供语句影响的示例@@ROWCOUNT.例如,"如"表示像IF这样的其他语句也会将其设置为零

诸如USE,SET <option>,DEALLOCATE CURSOR,CLOSE CURSOR,BEGIN TRANSACTION或COMMIT TRANSACTION之类的语句将ROWCOUNT值重置为0.

  • MSDN链接正在讨论`SET <option>`.据推测,"SET @ variable"将属于"进行简单赋值的语句总是将@@ ROWCOUNT值设置为1"的类别. (2认同)