1. ホーム
  2. sql

[解決済み] INSERT INTOで複数の値を挿入する(SQL Server 2005)

2022-03-07 23:22:25

質問

SQL Server 2005で、テーブルに複数のフィールドを挿入できない原因を探っています。 1つのレコードを挿入する次のクエリは、問題なく動作します。

INSERT INTO [MyDB].[dbo].[MyTable]
           ([FieldID]
           ,[Description])
     VALUES
           (1000,N'test')

しかし、複数の値を指定する次のクエリは失敗します。

INSERT INTO [MyDB].[dbo].[MyTable]
           ([FieldID]
           ,[Description])
     VALUES
           (1000,N'test'),(1001,N'test2')

こんなメッセージが出ます。

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ','.

SQL Sever Management Studio で INSERT のヘルプを調べたところ、その例の1つに、私が使用した "Values"構文(値のグループを括弧で囲みカンマで区切る)を使用していることが示されていました。 SQL Server Management Studio で見つけたヘルプ文書は、SQL Server 2008 用のようなので、おそらくそれが挿入がうまくいかない理由なのでしょう。 いずれにせよ、うまくいかない理由がわかりません。

解決方法は?

使用している構文は、SQL Server 2008 の新しいものです。

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1000,N'test'),(1001,N'test2')

SQL Server 2005 の場合、複数の INSERT ステートメントを使用します。

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1000,N'test')

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1001,N'test2')

もう一つの選択肢は UNION ALL :

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
SELECT 1000, N'test' UNION ALL
SELECT 1001, N'test2'