@@rowcount的作用域是什么?MSDN没有提到它的范围。
返回受最后一条语句影响的行数。
好的。
在我的SP中,我插入到一个表中,该表有一个insert trigger,当一个新值插入到表中时,它会执行另一个插入。
问题:
@@rowcount所指的范围是什么?(触发器还是SP)?
发布于 2012-08-06 20:02:27
当然,这篇文章是针对Server 2000的,但人们希望版本之间的范围不会改变。根据触发器如何影响Server 2000中的ROWCOUNT和标识一文,@@ROWCOUNT不会受到触发器的影响。
具体地说:
即使在基表中有触发器时,在Server 2000中使用@@ROWCOUNT也是安全的。触发器不会扭曲您的结果;您将得到您所期望的。@@ROWCOUNT即使在设置NOCOUNT时也能正常工作。
因此,如果您更新了三行,而触发器在其他地方更新了五行,那么您将得到一个3的@@ROWCOUNT。
另外,从Server在多线程应用程序中使用@@ROWCOUNT安全吗?中的GBN的答案
@@ROWCOUNT是作用域和连接安全。 实际上,它只读取该连接和作用域的最后一个语句行计数。
发布于 2012-08-07 03:01:59
每个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语句也会影响it....hence,其作用域是最后读取的语句。
https://stackoverflow.com/questions/11834980
复制相似问题