范围是@@rowcount
什么?MSDN没有提到它的范围。
返回受最后一条语句影响的行数。
行。
在我的 SP 中——我正在插入一个 table ,当一个新值被插入到 table 中时,insert trigger
它有另一个插入。
问题:
将涉及哪个范围@@rowcount
?(触发器或 SP)?
范围是@@rowcount
什么?MSDN没有提到它的范围。
返回受最后一条语句影响的行数。
行。
在我的 SP 中——我正在插入一个 table ,当一个新值被插入到 table 中时,insert trigger
它有另一个插入。
问题:
将涉及哪个范围@@rowcount
?(触发器或 SP)?
当然,这篇文章是针对 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 中的回答 - 在多线程应用程序中使用 @@ROWCOUNT 是否安全?:
@@ROWCOUNT 是范围和连接安全的。
事实上,它只读取该连接和范围的最后一条语句行数。
每个插入/更新/选择/设置/删除语句都会将 重置为@@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 语句也会影响它....因此它的范围是最后读取的语句。