@@ROWCOUNT は、last によって影響を受ける行数を示します SQL ステートメントの場合、問題のコマンドに続いてローカル変数にキャプチャするのが最善です。その値は、次にそれを見るときに変わるからです:
DECLARE @Rows int
DECLARE @TestTable table (col1 int, col2 int)
INSERT INTO @TestTable (col1, col2) select 1,2 union select 3,4
SELECT @[email protected]@ROWCOUNT
SELECT @Rows AS Rows,@@ROWCOUNT AS [ROWCOUNT]
出力:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
Rows
を取得します 値は 2、挿入された行の数ですが、SELECT @[email protected]@ROWCOUNT
コマンドは 1 行に影響を与えました
トランザクションに複数の INSERT や UPDATE などがある場合、何が起こっているかを「カウント」する方法を決定する必要があります。テーブルごとに個別の合計、単一の総計値、またはまったく異なるものを持つことができます。追跡する合計ごとに変数を DECLARE し、それに適用される各操作の後に追加する必要があります。
--note there is no error handling here, as this is a simple example
DECLARE @AppleTotal int
DECLARE @PeachTotal int
SELECT @AppleTotal=0,@PeachTotal=0
BEGIN TRANSACTION
INSERT INTO Apple (col1, col2) Select col1,col2 from xyz where ...
SET @[email protected][email protected]@ROWCOUNT
INSERT INTO Apple (col1, col2) Select col1,col2 from abc where ...
SET @[email protected][email protected]@ROWCOUNT
INSERT INTO Peach (col1, col2) Select col1,col2 from xyz where ...
SET @[email protected][email protected]@ROWCOUNT
INSERT INTO Peach (col1, col2) Select col1,col2 from abc where ...
SET @[email protected][email protected]@ROWCOUNT
COMMIT
SELECT @AppleTotal AS AppleTotal, @PeachTotal AS PeachTotal