2012-08-06 6 views
27

@@rowcountの範囲はどこですか? MSDNにはその範囲が記載されていません。@@ rowcountの範囲?

最後の文の影響を受ける行の数を返します。

私のSP - 私はinsert triggerもう1つのテーブルに挿入しています。テーブルに新しい値を挿入すると、が挿入されます。

質問:

どのスコープに@@rowcountを指すのでしょうか? (トリガーまたはSP)?

答えて

20

この記事はSQL Server 2000用ですが、バージョン間でスコープが変更されないことを望みます。記事How triggers affect ROWCOUNT and IDENTITY in SQL Server 2000によれば、@@ROWCOUNTはトリガーの影響を受けません。具体的に

これは、ベーステーブル上のトリガーがある場合でも、SQL Server 2000で@@ ROWCOUNTを使用しても安全です。トリガーは結果を歪ませません。あなたはあなたが期待しているものを手に入れます。 NOCOUNTが設定されていても@@ ROWCOUNTは正しく動作します。

だから、

次の3つの行を更新した場合、およびトリガが他の場所で5行を更新し、あなたはSQL Server - is using @@ROWCOUNT safe in multithreaded applications?でGBNの答えから、また@@ROWCOUNT 3の

を取得します:

@@ ROWCOUNTはスコープと接続に安全です。

実際、その接続とスコープの最後の文の行数だけを読み取ります。

+0

ありがとうございました! –

11

すべての挿入/更新/選択/削除/設定文は実行されたステートメント

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文が影響してみにより影響を受ける行に@@rowcountをリセットそれゆえ、その範囲は最後に読んだ文です。