の範囲は@@rowcount
? MSDNはその範囲について言及していません。
最後のステートメントによって影響を受けた行の数を返します。
Ok。
私のSPでは、新しい値がテーブルに挿入されたときに別の挿入を行う table に挿入していますinsert trigger
。
質問:
はどのスコープ@@rowcount
を参照しますか? (トリガーまたは SP) ?
の範囲は@@rowcount
? MSDNはその範囲について言及していません。
最後のステートメントによって影響を受けた行の数を返します。
Ok。
私のSPでは、新しい値がテーブルに挿入されたときに別の挿入を行う table に挿入していますinsert trigger
。
質問:
はどのスコープ@@rowcount
を参照しますか? (トリガーまたは SP) ?
確かに、この記事は SQL Server 2000 を対象としていますが、バージョン間で範囲が変わらないことを願っています。How triggers impact ROWCOUNT and IDENTITY in SQL Server 2000 の記事によると、トリガーの影響を受け@@ROWCOUNT
ません。
具体的には:
ベース テーブルにトリガーがある場合でも、SQL Server 2000 で @@ROWCOUNT を使用しても安全です。トリガーによって結果がゆがめられることはありません。あなたが期待するものを得るでしょう。@@ROWCOUNT は、NOCOUNT が設定されている場合でも正しく機能します。
したがって、3 つの行を更新し、トリガーが別の場所で 5 つの行を更新すると、@@ROWCOUNT
3 になります。
また、SQL Server での GBN の回答から - マルチスレッド アプリケーションで @@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 ステートメントでさえ影響を与えます....したがって、そのスコープは最後に読み取られたステートメントです。