Tsql 如果@@rowcount>;0将@@rowcount重置为0。为什么?

Tsql 如果@@rowcount>;0将@@rowcount重置为0。为什么?,tsql,Tsql,@@Rowcount用于通知最近一次受影响的行数 选择、插入、更新或删除语句 declare @row int select 100 if @@rowcount>0 set @row=@@rowcount ... 因为一旦执行了if@@rowcount>0,上述操作将返回0 它被重置为0,因为它不返回任何行。所以总是分配给 变量优先 为什么语句如果@rowcount>0将@@rowcount重置为0?@@rowcount的值是否仅受select、insert、update和delete

@@Rowcount用于通知最近一次受影响的行数 选择、插入、更新或删除语句

declare @row int select 100 if @@rowcount>0  set @row=@@rowcount ...
因为一旦执行了
if@@rowcount>0
,上述操作将返回0 它被重置为0,因为它不返回任何行。所以总是分配给 变量优先

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


谢谢你

它受最后一句话的影响。就像这句话

Declare @row int
select 100 union all select 200 union all select 300
set @row = @@rowcount;
SELECT @row, @@rowcount
如果您阅读了,它将举例说明哪些语句会影响
@@ROWCOUNT
。例如,“比如”意味着其他语句,比如IF也会将其设置为零

诸如USE、SET
取消分配游标、CLOSE游标、BEGIN TRANSACTION或COMMIT TRANSACTION等语句会将ROWCOUNT值重置为0

那么, 我在使用sybase时遇到了类似的问题,这表明“if”可能有问题

输出为: 计数器1=3 计数器2=0

我希望有3个(原来的一个)或1个(因为选择)

这更奇怪,因为

任何不影响行的语句(如IF语句)都不会将@rowcount重置为零 另一方面,人们对它到底是如何工作的有很多困惑(基于互联网上的讨论)


在第一行的解决方案的末尾,我将@rowcount赋值给变量,并且我的逻辑基于该变量

1-据我所知,@@rowcount返回1而不是0的原因是“选择@row,@@rowcount”查询影响一行。但是我认为sql语句处理DB表中的实际行时使用了术语“受影响的行数”,但是select语句不访问任何行,那么为什么@rowcount返回1?@user702769:
select@row中的@rowcount,@@rowcount
set@row=@@rowcount在上面。SELECT无法读取自己的文件@@rowcount@user702769:根据MSDN,设置后。@@rowcount应为零。但是,不要将“xx行受影响消息”与@rowcount混淆。IIRC(无法在此测试)集合将给出“1行受影响”,但@@ROWCOUNT将为零。MSDN链接讨论的是
SET
。大概
SET@variable
属于“进行简单赋值的语句总是将@ROWCOUNT值设置为1”的类别。马丁·史密斯:正确。上面的选项位已丢失。我没有再看那篇文章。将修复以上问题是的,我惊讶地发现(困难的方式)在SQL Server中@@rowcount被一个“if”语句重置。
declare @counter1 int
declare @counter2 int

select @counter1 = @@rowcount
if @@rowcount = 0 return
select @counter2 = @@rowcount