1行のINSERT文で複数のデータを挿入する方法

SQLServerで1行のInsert文で複数件のデータを一気に挿入することはできないのでしょうか?

実はSQLServer 2008以前ではできませんでしたが、SQLServer 2008以降ではできるようになりました。

具体的には通常のInsert文のVALUES移行を「,(カンマ)」で続けて書いていくことで可能になります。

注意としては1つでもエラーの発生するVALUESが存在すると、すべてのデータが挿入がCommit(コミット)されずRollBack(ロールバック)されてしまいます。(1件のデータも挿入されないことになります。)

以下に具体的な利用方法を解説します。

スポンサーリンク

1行のINSERTで複数件のデータ挿入

これまでは1行INSERT文では1行のデータしか挿入できませんでしたが、SQLServer2008では1行のINSERT文で複数件を挿入できます。

複数行のINSERT文で複数件のデータ挿入

通常はテーブルに複数件挿入する場合は以下の様にINSERT文を複数件書いて実行します。

以下が挿入後の検索結果です。

1行のINSERT文で複数件データ挿入

SQLServer2008で実行できるようになった1行のINSERT文で複数件挿入する
SQLは「VALUES以降をカンマで区切って」渡せば挿入できます。

以下が挿入後の検索結果です。

挿入できるのは最大1000行までとHELPにありますので、それ以上の場合はINSERT文を分けて実行する必要があります。

1行のINSERT文で複数件データ挿入時のエラー動作

はじめに複数行でINSERTする場合を検証します。
わざとエラーになうように、3行目でint型にVARCHAR型を入れてあります。

実行結果は

になります。

テーブルをSELECTすると

となり、エラー発生後のデータはテーブルに挿入されていません。

次に1行のINSERT文で複数件挿入するSQLでエラーになる行を含む行があった場合にどうなるかを検証します。
これも同じ様に、わざとエラーになうように、3行目でint型にVARCHAR型を入れてあります。

実行結果は

エラー発生後にテーブルを検索してみても

行が1行も選択されないので、エラー行を含む場合は1行のINSERTで複数件挿入する場合は「全行のデータが挿入されない」というこになります。

1行なので当然なのですが注意が必要です。

データの整合性を保つために全件RollBack(ロールバック)された方が都合が良い場合に有効な機能ですね。

以上、1行のINSERT文で複数のデータを挿入する方法でした。

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