@@rowcount
的范围是什么?MSDN未提及其范围。
返回受最后一个语句影响的行数。
确定。
在我的SP中 - 我正在插入一个表格,当一个新值插入表格时,该表格中有一个insert trigger
另一个插入。
问题:
@@rowcount
将参考哪个范围? (触发器或SP)?
答案 0 :(得分:20)
当然,本文适用于SQL Server 2000,但人们希望范围不会在版本之间发生变化。根据文章How triggers affect ROWCOUNT and IDENTITY in SQL Server 2000,@@ROWCOUNT
不会受到触发器的影响。
具体做法是:
即使基表上有触发器,在SQL Server 2000中使用@@ ROWCOUNT也是安全的。触发器不会扭曲您的结果;你会得到你期望的。即使设置了NOCOUNT,@@ ROWCOUNT也能正常工作。
因此,如果您更新了三行,并且触发器在其他地方更新了五行,那么您的@@ROWCOUNT
将为3。
另外,根据GBN在SQL Server - is using @@ROWCOUNT safe in multithreaded applications?中的回答:
@@ ROWCOUNT既是范围又是连接安全。
实际上,它只读取该连接和范围的最后一个语句行数。
答案 1 :(得分:12)
每个insert / update / select / set / delete语句将@@rowcount
重置为受执行语句影响的行
begin
declare @myrowcount int,
@myrowcount2 int
insert stmt
SET @myrowcount=@@rowcount
if @myrowcount>0
begin
insert stmt
SET @myrowcount2 =@@rowcount
if @myrowcount2 >0
do smthg
end
end
或试试这个
SELECT * FROM master.sys.objects -- 50 rows
IF (1=1)
SELECT @@ROWCOUNT AS RowsAffected -- 0, because the IF did not affect any rows
即使是IF语句也会影响它....因此它的范围是最后读取的语句。