2012-04-23 81 views
0

我使用以下使用单一INSERT语句插入多行方法,即插入行的ANSI风格。它是SQL Server 2008提供和2012年我不知道的SQL Server 2005/2000SQL服务器 - 插入多行单(ANSI风格)语句

创建测试表:

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

INSERT语句插入5行

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

请让我知道是否有任何其他最好的办法来实现这个

+3

此插入样式在SQL Server 2000和2005中不可用。 – 2012-04-23 06:59:40

回答

2

SQL服务器 - 插入多行单(ANSI风格)语句

对于SQL Server 2000 +

根据SQL The Complete Reference, Third Edition (August 12, 2009)

1)多行INSERT的语法是

INSERT INTO table-name (columns not mandatory) 
query 

(236页,图10-3)。

2)SELECT语句的FROM子句强制性的(第87页,图6-1)。

因此,在这种情况下,仅使用一个INSERT语句插入多行,我们需要一个auxiliary table with just one row

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.(PAG e 218)。

所以,

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

将SQL Server的2008+上工作。

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'