とりあえず半歩

学んだことを1日1個、簡単なことでも良いから記録していきたい。

複数レコードを一括挿入する

課題

INSERT文で複数レコードをテーブルに一括挿入する。

1レコード挿入するごとにINSERT文を1文書くのも大変なので、まとめて挿入したい。

実行

実行環境はSQL Server 2008 R2 Express. あとManagement Studio.

サンプル・データ

ID Name Price
1 apple 100
2 apple 120
3 orange 50
4 orange 40
5 apple 80
6 orange 60
7 banana 120
8 banana 150

前回で使ったテーブルと同じ。

INSERT文

INSERT INTO [fruits] (
    [Name]
  , [Price]
)
VALUES
    ( 'cherry', 200 )
  , ( 'cherry', 300 )
  , ( 'pineapple', 250 )
  , ( 'pineapple', 280 )
  , ( 'banana', 90 );

挿入結果

ID Name Price
1 apple 100
2 apple 120
3 orange 50
4 orange 40
5 apple 80
6 orange 60
7 banana 120
8 banana 150
9 cherry 200
10 cherry 300
11 pineapple 250
12 pineapple 280
13 banana 90

IDが9以降のレコードが挿入したデータ。

エラー時の実行結果

次のようなエラーが発生するINSERT文を実行すると、レコードは1つも挿入されない。

USE [TestDB]
GO

INSERT INTO [fruits] (
    [Name]
  , [Price]
)
VALUES
    ( 'water', 80 )
  , ( 'heart', 'priceless' ); -- Priceはint型.

メッセージ 245、レベル 16、状態 1、行 2 varchar の値 'priceless' をデータ型 int に変換できませんでした。

評価

挿入したい複数レコードのうち、1つでもエラーが発生したらどのレコードも挿入しないっていう場面に使おうかな。

参考