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

Posted

技术标签:

【中文标题】使用 INSERT INTO (SQL Server 2005) 插入多个值【英文标题】:Insert multiple values using INSERT INTO (SQL Server 2005) 【发布时间】:2010-03-17 13:25:54 【问题描述】:

在 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 知识都是在过去几年内完成的。 How do I insert multiple rows WITHOUT repeating the "INSERT INTO dbo.Blah" part of the statement? 的可能重复项 【参考方案1】:

您使用的语法是 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 2008 上开发时使用 SQL 2005 作为测试系统。一些开发人员不知道这种语法仅在 SQL 2005 上可用。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

在 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

【讨论】:

以上是关于使用 INSERT INTO (SQL Server 2005) 插入多个值的主要内容,如果未能解决你的问题,请参考以下文章

SQL——INSERTSELECTUPDATEDELETE和INSERT INTO

SQL语法:Replace into 与 Insert into 的区别

SQL语法:Replace into 与 Insert into 的区别

SQL语法:Replace into 与 Insert into 的区别

SQL INSERT INTO 语法 [重复]

使用 select 语句编写 Sql insert into 语句