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

使用Insert INTO(SQL Server 2005)插入多个值,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,在SQLServer2005中,我试图找出为什么不能在表中插入多个字段。插入一条记录的以下查询工作正常: INSERT INTO [MyDB].[dbo].[MyTable] ([FieldID] ,[Description]) VALUES (1000,N'test') 但是,以下指定多个值的查询失败: INSERT INTO [MyDB].[dbo].[MyTable] ([FieldID]

在SQLServer2005中,我试图找出为什么不能在表中插入多个字段。插入一条记录的以下查询工作正常:

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

当我在SQLServerManagementStudio中查找INSERT的帮助时,其中一个示例显示使用了我使用的“Values”语法(括号中的值组用逗号分隔)。我在SQLServerManagementStudio中找到的帮助文档看起来像是针对SQLServer2008的,所以这可能就是插入不起作用的原因。不管怎样,我都不明白为什么它不起作用。

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

您还可以使用以下语法:-

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

在SQL Server 200820122014中的

中,可以使用单个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

非常感谢。当我们在SQL2008上开发时,我们使用SQL2005作为测试系统。一些开发人员不知道这个语法只在SQL 2005上可用。只是好奇,如果您在值集之间没有使用
?我知道这个帖子很老了,但我很好奇。我在寻找答案时发现了这一点,我的大部分SQL知识都是在过去的几年内获得的