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

时间:2011-10-09 18:14:59

标签: tsql

Link

  

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

declare @row int select 100 if @@rowcount>0  set @row=@@rowcount ...
     

以上将返回0,因为只要执行if @@rowcount>0   它被重置为0,因为它不返回任何行。所以总是分配给   变量第一

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

谢谢

2 个答案:

答案 0 :(得分:11)

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

Declare @row int
select 100 union all select 200 union all select 300
set @row = @@rowcount;
SELECT @row, @@rowcount

如果您阅读actual Microsoft SQL Server Docs on MSDN,则会举例说明哪些陈述会影响@@ROWCOUNT。例如,“诸如”意味着像IF这样的其他语句也会将其设置为零

  

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

答案 1 :(得分:0)

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

declare @counter1 int
declare @counter2 int

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

输出是: counter1 = 3 counter2 = 0

我希望3(原始的)或1(因为选择)。

由于这个原因,这更加奇怪 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc38151.1540/doc/html/san1278452893271.html

“@@ rowcount 由任何不影响行的语句重置为零,,如IF 语句。” 另一方面,它有多么混乱(如基于互联网讨论)

在我的第一行解决方案的最后,我将@@ rowcount分配给变量,我的逻辑基于该变量