2012-08-06 23 views
27

@@rowcount的範圍是什麼? MSDN沒有提到它的範圍。@@ rowcount的範圍?

返回受上一條語句影響的行數。

好的。

在我的SP - 我插入一個表,其中有一個insert trigger其中另一個插入新值插入到表中。

問:

到哪個範圍@@rowcount將參考? (觸發器或SP)?

回答

20

當然,這篇文章是針對SQL Server 2000的,但有人希望範圍在版本之間不會改變。根據文章How triggers affect ROWCOUNT and IDENTITY in SQL Server 2000@@ROWCOUNT不會受到觸發器的影響。

具體做法是:

它的安全使用@@ ROWCOUNT SQL Server 2000中,即使有基表上的觸發器。觸發器不會歪曲你的結果;你會得到你所期望的。即使設置了NOCOUNT,@@ ROWCOUNT也能正常工作。

所以,如果你更新五行別處三行,觸發更新,你會得到SQL Server - is using @@ROWCOUNT safe in multithreaded applications? 3.

一個@@ROWCOUNT另外,從GBN的回答是:

@@ ROWCOUNT是範圍和連接安全的。

實際上,它只讀取該連接和作用域的最後一條語句行數。

+0

謝謝你的解釋! – 2016-04-21 08:54:38

11

每個插入/更新/選擇/套/ delete語句重置@@rowcount到受執行的語句的行

begin 
declare @myrowcount int, 
    @myrowcount2 int 
insert stmt 
SET @[email protected]@rowcount 
if @myrowcount>0 
begin 
insert stmt 
SET @myrowcount2 [email protected]@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語句影響它......因此它的範圍是讀取的最後一條語句。