@@ rowcount的范围?

Roy*_*mir 28 sql-server rowcount

范围是@@rowcount什么?MSDN没有提到它的范围.

返回最后一个语句影响的行数.

好.

在我的SP -我插入一个表格,里面有insert trigger哪些呢另一插入时,一个新的值插入到表中.

题:

@@rowcount将参考哪个范围?(触发器还是SP)?

Lit*_*les 20

当然,本文适用于SQL Server 2000,但人们希望范围不会在版本之间发生变化.根据文章How触发器如何影响SQL Server 2000中的ROWCOUNT和IDENTITY,@@ROWCOUNT不会受到触发器的影响.

特别:

即使基表上有触发器,在SQL Server 2000中使用@@ ROWCOUNT也是安全的.触发器不会扭曲您的结果; 你会得到你期望的.即使设置了NOCOUNT,@@ ROWCOUNT也能正常工作.

因此,如果您更新三行,并且触发器在其他地方更新了五行,那么您将得到@@ROWCOUNT3行.

另外,从GBN在SQL Server中的答案- 在多线程应用程序中使用@@ ROWCOUNT安全吗?:

@@ ROWCOUNT是范围和连接安全的.

实际上,它只读取该连接和范围的最后一个语句行数.


NG.*_*NG. 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
Run Code Online (Sandbox Code Playgroud)

或试试这个

 SELECT * FROM master.sys.objects -- 50 rows
    IF (1=1)
        SELECT @@ROWCOUNT AS RowsAffected -- 0, because the IF did not affect any rows
Run Code Online (Sandbox Code Playgroud)

甚至IF语句都会影响它......因此它的范围是最后一个读取的语句.