@@ROWCOUNTで処理した件数を取得する

プログラミング SQL Server

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」の値を利用したい場合は他の変数に保存しておく必要があります。

タイトルとURLをコピーしました