_@@rowcount
_のスコープは何ですか? [〜#〜] msdn [〜#〜] はそのスコープについて言及していません。
最後のステートメントの影響を受けた行の数を返します。
OK。
私のSP —私はテーブルに挿入しています。これは、新しい値がテーブルに挿入されたときにanother挿入を行う_insert trigger
_を持っています。
質問:
_@@rowcount
_はどのスコープを参照しますか? (トリガーまたはSP)?
確かに、この記事はSQL Server 2000に関するものですが、バージョン間でスコープが変更されないことを願っています。記事によると トリガーがSQL Server 2000のROWCOUNTおよびIDENTITYにどのように影響するか 、@@ROWCOUNT
はトリガーの影響を受けません。
具体的には:
ベーステーブルにトリガーがある場合でも、SQL Server 2000で@@ ROWCOUNTを使用しても安全です。トリガーは結果を歪めません。期待どおりの結果が得られます。 @@ ROWCOUNTは、NOCOUNTが設定されている場合でも正しく機能します。
したがって、3つの行を更新し、トリガーが別の場所で5つの行を更新すると、@@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文でさえもそれに影響を与えます。そのため、そのスコープは最後に読み込まれた文です。