29

の範囲は@@rowcount? MSDNはその範囲について言及していません。

最後のステートメントによって影響を受けた行の数を返します。

Ok。

私のSPでは、新しい値がテーブルに挿入されたときに別の挿入を行う table に挿入していますinsert trigger

質問:

はどのスコープ@@rowcountを参照しますか? (トリガーまたは SP) ?

4

2 に答える 2

22

確かに、この記事は SQL Server 2000 を対象としていますが、バージョン間で範囲が変わらないことを願っています。How triggers impact ROWCOUNT and IDENTITY in SQL Server 2000 の記事によると、トリガーの影響を受け@@ROWCOUNTません。

具体的には:

ベース テーブルにトリガーがある場合でも、SQL Server 2000 で @@ROWCOUNT を使用しても安全です。トリガーによって結果がゆがめられることはありません。あなたが期待するものを得るでしょう。@@ROWCOUNT は、NOCOUNT が設定されている場合でも正しく機能します。

したがって、3 つの行を更新し、トリガーが別の場所で 5 つの行を更新すると、@@ROWCOUNT3 になります。

また、SQL Server での GBN の回答から - マルチスレッド アプリケーションで @@ROWCOUNT を安全に使用していますか? :

@@ROWCOUNT は、スコープと接続の両方に対して安全です。

実際には、その接続とスコープの最後のステートメントの行数のみを読み取ります。

于 2012-08-06T20:02:27.043 に答える
12

すべての挿入/更新/選択/設定/削除ステートメント@@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 ステートメントでさえ影響を与えます....したがって、そのスコープは最後に読み取られたステートメントです。

于 2012-08-07T03:01:59.410 に答える