29

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

返回受最后一条语句影响的行数。

行。

在我的 SP 中——我正在插入一个 table ,当一个新值被插入到 table 中时,insert trigger它有另一个插入。

问题:

将涉及哪个范围@@rowcount?(触发器或 SP)?

4

2 回答 2

22

当然,这篇文章是针对 SQL Server 2000 的,但人们希望范围不会在版本之间发生变化。根据文章How triggers affect ROWCOUNT and IDENTITY in SQL Server 2000@@ROWCOUNT不会受到触发器的影响。

具体来说:

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

因此,如果您更新三行,而触发器在其他地方更新五行,您将得到@@ROWCOUNT3。

此外,来自 GBN 在SQL Server 中的回答 - 在多线程应用程序中使用 @@ROWCOUNT 是否安全?

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

事实上,它只读取该连接和范围的最后一条语句行数。

于 2012-08-06T20:02:27.043 回答
12

每个插入/更新/选择/设置/删除语句都会将 重置为@@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 语句也会影响它....因此它的范围是最后读取的语句。

于 2012-08-07T03:01:59.410 回答