Вставьте несколько значений с помощью INSERT INTO (SQL Server 2005) - PullRequest
72 голосов
/ 17 марта 2010

В SQL Server 2005 я пытаюсь выяснить, почему я не могу вставить несколько полей в таблицу. Следующий запрос, который вставляет одну запись, работает нормально:

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 ','.

Когда я посмотрел справку по INSERT в SQL Sever Management Studio, один из их примеров показал использование синтаксиса «Значения», который я использовал (с группами значений в скобках и через запятую). Справочная документация, которую я нашел в SQL Server Management Studio, выглядит так, как будто она предназначена для SQL Server 2008, поэтому, возможно, именно поэтому вставка не работает. В любом случае, я не могу понять, почему это не сработает.

Ответы [ 3 ]

96 голосов
/ 17 марта 2010

Синтаксис, который вы используете, является новым для 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'
10 голосов
/ 17 марта 2010

Вы также можете использовать следующий синтаксис: -

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

С здесь

1 голос
/ 20 января 2016

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...