0

我正在使用以下方法使用单个INSERT语句插入多行,即插入行的 ANSI 样式。它在 SQL Server 2008 和 2012 中可用。我不确定 SQL Server 2005/2000。

创建测试表:

create table TestInsert (ID INT, Name NVARCHAR(50))

单个INSERT语句插入 5 行

INSERT INTO TestInsert 
VALUES (1,'a'),
       (2,'b'),
       (3,'c'),
       (4,'d'),
       (5,'e')

请让我知道是否有任何其他最佳方法可以实现这一目标

4

2 回答 2

4

试试这个:

INSERT TestInsert
    SELECT  1, 'a'
    UNION ALL
    SELECT  2, 'b'
    UNION ALL
    SELECT  3, 'c'
    UNION ALL
    SELECT  4, 'd'
    UNION ALL
    SELECT 5, 'e' 
于 2012-04-23T07:01:05.340 回答
2

SQL Server - 使用单个( ANSI 样式)语句插入多行

对于 SQL Server 2000+

根据SQL The Complete Reference,第三版(2009 年 8 月 12 日)

1) 多行插入的语法是

INSERT INTO table-name (columns not mandatory) 
query

(第 236 页,图 10-3)。

2) SELECT 语句必须有 FROM 子句(第 87 页,图 6-1)。

因此,在这种情况下,要仅使用一条语句插入多行,INSERT我们需要一个只有一行的辅助表

CREATE TABLE dual(value INT PRIMARY KEY CHECK(value = 1))
INSERT dual(value) VALUES(1)

进而

INSERT INTO table-name (columns) -- the columns are not mandatory
SELECT values FROM dual
UNION ALL
SELECT another-values FROM dual
UNION ALL
SELECT another-values FROM dual

编辑 2:对于 SQL Server 2008+

从 SQL Server 2008 开始,我们可以使用行构造函数:((values for row 1), (values for row 2), (values for row 3), etc.第 218 页)。

所以,

INSERT INTO TestInsert 
VALUES (1,'a'), --The string delimiter is ' not ‘...’
       (2,'b'),
       (3,'c'),
       (4,'d'),
       (5,'e')

将适用于 SQL Server 2008+。

于 2012-04-23T08:42:52.260 回答