web-dev-qa-db-ja.com

INSERT INTOを使用して複数の値を挿入する(SQL Server 2005)

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のように見えるため、おそらく挿入が機能しないのはそのためです。いずれにしても、なぜ機能しないのかわかりません。

72
Ben McCormack

使用している構文は、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')

もう1つのオプションは、UNION ALLを使用することです。

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

次の構文も使用できます。

INSERT INTO MyTable (FirstCol, SecondCol)
SELECT 'First' ,1
UNION ALL
SELECT 'Second' ,2
UNION ALL
SELECT 'Third' ,3
UNION ALL
SELECT 'Fourth' ,4
UNION ALL
SELECT 'Fifth' ,5
GO

ここ から

10
Ashish Gupta

SQL Server 2008、2012、2014では、単一のSQL INSERTステートメントを使用して複数の行を挿入できます。

 INSERT INTO TableName ( Column1, Column2 ) VALUES
    ( Value1, Value2 ), ( Value1, Value2 )

別の方法

INSERT INTO TableName (Column1, Column2 )
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
UNION ALL
SELECT Value1 ,Value2
1
Rae Lee