SQLServerでは実行したSQLで影響を与えた処理件数を@@ROWCOUNTを使用することで取得できます。
@@ROWCOUNTは直前に処理した件数を取得するための関数
SQLServerでは実行したSQLで影響を与えた処理件数を@@ROWCOUNTを使用することで取得できます。
@@ROWCOUNTで処理件数を取得する
まずはInsertした処理件数を取得します。
INSERT INTO test_table VALUES( 1, '太郎さん') INSERT INTO test_table VALUES( 2, '次郎さん') INSERT INTO test_table VALUES( 3, '三郎さん') PRINT '@@ROWCOUNT=' + CAST(@@ROWCOUNT AS VARCHAR) + '件挿入しました'
上記のSQLを実行すると
(1 行処理されました) (1 行処理されました) (1 行処理されました) @@ROWCOUNT=1件挿入しました
となり、INSERTで最後のステートメントの影響を受けた処理件数は1件になります。
当たり前ですね。
でも、1行のINSERT文で複数のデータを挿入する方法のように
1行のINSET文で複数行データを挿入すると
INSERT INTO test_table VALUES( 4, '四郎さん') ,( 5, '五郎さん') ,( 6, '六郎さん') ,( 7, '七郎さん') ,( 8, '八郎さん') PRINT '@@ROWCOUNT=' + CAST(@@ROWCOUNT AS VARCHAR) + '件挿入しました'
の実行結果は
(5 行処理されました) @@ROWCOUNT=5件挿入しました
のようにちゃんと挿入した処理件数を@@ROWCOUNTが取得してくれます。
@@ROWCOUNTで更新件数を取得する
更新でも同様に
UPDATE test_table SET name = 'たろうさん' WHERE no = 1 PRINT '@@ROWCOUNT=' + CAST(@@ROWCOUNT AS VARCHAR) + '件更新しました' UPDATE test_table SET name = 'じろうさん' PRINT '@@ROWCOUNT=' + CAST(@@ROWCOUNT AS VARCHAR) + '件更新しました'
は
(1 行処理されました) @@ROWCOUNT=1件更新しました (8 行処理されました) @@ROWCOUNT=8件更新しました
になります。
@@ROWCOUNTで削除件数を取得する
削除も
DELETE FROM test_table PRINT '@@ROWCOUNT=' + CAST(@@ROWCOUNT AS VARCHAR) + '件削除しました'
で
(8 行処理されました) @@ROWCOUNT=8件削除しました
になり、処理件数が取得できます。
@@ROWCOUNTの注意事項
@@ROWCOUNTは直前のステートメントで影響を受けた件数なので
INSERT INTO test_table VALUES( 4, '四郎さん') ,( 5, '五郎さん') ,( 6, '六郎さん') ,( 7, '七郎さん') ,( 8, '八郎さん') PRINT '@@ROWCOUNT=' + CAST(@@ROWCOUNT AS VARCHAR) + '件挿入しました' PRINT '@@ROWCOUNTは' + CAST(@@ROWCOUNT AS VARCHAR) + 'になりました'
とすると2行目のPRINTで表示されている@@ROWCOUNTは1行目のPRINTを表示した時点でクリアされるので
(5 行処理されました) @@ROWCOUNT=5件挿入しました @@ROWCOUNTは0になりました
と0になってしまいます。
あとで「@@ROWCOUNT」の値を利用したい場合は他の変数に保存しておく必要があります。