Sql server @rowcount的作用域?
Sql server @rowcount的作用域?,sql-server,rowcount,Sql Server,Rowcount,@@rowcount的范围是什么?没有提到它的范围 返回受上一条语句影响的行数 嗯 在我的SP中,我正在插入一个表,该表有一个insert触发器,当向表中插入新值时,该触发器会执行另一次插入 问题: @@rowcount将引用哪个范围?(触发器或SP)?当然,这篇文章是针对SQL Server 2000的,但人们希望范围不会在不同版本之间发生变化。根据这篇文章,@@ROWCOUNT将不受触发器的影响 具体而言: 在SQL Server 2000中使用@ROWCOUNT是安全的,即使基表上有触发器
@@rowcount
的范围是什么?没有提到它的范围
返回受上一条语句影响的行数
嗯
在我的SP中,我正在插入一个表,该表有一个insert触发器
,当向表中插入新值时,该触发器会执行另一次插入
问题:
@@rowcount
将引用哪个范围?(触发器或SP)?当然,这篇文章是针对SQL Server 2000的,但人们希望范围不会在不同版本之间发生变化。根据这篇文章,@@ROWCOUNT
将不受触发器的影响
具体而言:
在SQL Server 2000中使用@ROWCOUNT是安全的,即使基表上有触发器。触发器不会扭曲你的结果;你会得到你所期望的@@即使设置了NOCOUNT,ROWCOUNT也能正常工作
因此,如果您更新了三行,而触发器在其他地方更新了五行,则会得到@@ROWCOUNT
的3
此外,根据GBN在中的回答:
@@ROWCOUNT是作用域和连接安全的
实际上,它只读取该连接和作用域的最后一条语句行数
每个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语句也会影响它……因此它的范围是最后一次阅读的语句。谢谢您的解释!