2010-03-17 69 views
69

在SQL Server 2005中,我試圖找出爲什麼我無法將多個字段插入到表中。下面的查詢,這將插入一個記錄,做工精細:使用INSERT INTO插入多個值(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 ','. 

當我在SQL Sever Management Studio中查找INSERT的幫助時,其中一個示例顯示了我使用的「Values」語法(與括號中的值組相關聯,並以逗號分隔)。我在SQL Server Management Studio中找到的幫助文檔看起來像SQL Server 2008,所以也許這就是插入不起作用的原因。無論如何,我無法弄清楚爲什麼它不起作用。

+0

只是如果你試過沒有好奇的','值集之間?我知道這篇文章相當老,但我很好奇。我在尋找答案時發現了這一點,並且我的大部分SQL知識都是在過去的幾年中。 – Malachi 2013-04-10 15:35:36

+0

可能的重複[如何插入多行而不重複聲明的「INSERT INTO dbo.Blah」部分?](http://stackoverflow.com/questions/2624713/how-do-i-insert-multiple-行 - 無需重複 - 插入到dbo-blah-部分) – 2014-02-25 17:45:36

回答

94

你正在使用的語法是新的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' 
+1

感謝您的解釋。選擇/聯盟運作良好。 – 2010-03-17 13:37:42

+0

非常感謝你。在SQL 2008上開發時,我們使用SQL 2005作爲測試系統。一些開發人員並不知道這個語法僅在SQL 2005上可用。 – aheil 2012-08-06 11:35:28

+0

@Downvoter - 謹慎評論? – Oded 2013-06-17 15:42:15

9

您還可以使用以下語法: -

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 

here

0

在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