使用INSERT INTO插入多个值(SQL Server 2005)


75

在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的帮助时,其中一个示例显示了使用的“值”语法(括号内是值组,并用逗号分隔)。我在SQL Server Management Studio中找到的帮助文档看起来像是针对SQL Server 2008的,所以这也许就是插入无法正常工作的原因。无论哪种方式,我都无法弄清楚为什么它不起作用。


如果您尝试不,使用值集之间的值,是否感到好奇?我知道这篇文章相当老,但是我很好奇。我在寻找答案时就发现了这一点,并且我的大部分SQL知识都在过去的几年中。
玛拉基2013年

Answers:


100

您使用的语法是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'

非常感谢你。我们使用SQL 2005的测试系统,而我们在2008年的SQL开发一些开发商还没有意识到的事实,这句法仅适用于SQL 2005可用
aheil

11

您还可以使用以下语法:

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

这里


2

在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.