@@ 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语句的影响?
谢谢
答案 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分配给变量,我的逻辑基于该变量