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

Insert multiple values using INSERT INTO (SQL Server 2005)

在SQL Server 2005中,我试图弄清楚为什么我无法在表中插入多个字段。 以下查询,插入一条记录,工作正常:

1
2
3
4
5
INSERT INTO [MyDB].[dbo].[MyTable]
           ([FieldID]
           ,[Description])
     VALUES
           (1000,N'test')

但是,以下查询(指定多个值)将失败:

1
2
3
4
5
INSERT INTO [MyDB].[dbo].[MyTable]
           ([FieldID]
           ,[Description])
     VALUES
           (1000,N'test'),(1001,N'test2')

我收到这条消息:

1
2
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ','.

当我在SQL Sever Management Studio中查找INSERT的帮助时,他们的一个示例显示了我使用的"值"语法(括号中的值组并用逗号分隔)。 我在SQL Server Management Studio中找到的帮助文档看起来就像是SQL Server 2008,所以也许这就是插入不起作用的原因。 无论哪种方式,我都无法弄清楚为什么它不起作用。


您使用的语法是SQL Server 2008的新增功能:

1
2
3
4
5
INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1000,N'test'),(1001,N'test2')

对于SQL Server 2005,您将必须使用多个INSERT语句:

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1000,N'test')

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1001,N'test2')

另一个选择是使用UNION ALL

1
2
3
4
5
INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
SELECT 1000, N'test' UNION ALL
SELECT 1001, N'test2'


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

1
2
3
4
5
6
7
8
9
10
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

从这里


在SQL Server 2008,2012,2014中,您可以使用单个SQL INSERT语句插入多行。

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

其他方式

1
2
3
4
5
6
7
8
9
10
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