Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server @rowcount的作用域?_Sql Server_Rowcount - Fatal编程技术网

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语句也会影响它……因此它的范围是最后一次阅读的语句。

谢谢您的解释!