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

2019-06-23 21:02发布

我使用下面的方法使用单个插入多行INSERT语句,即插入行的ANSI风格。 它是在SQL Server 2008和2012可我不知道SQL服务器2000分之2005的。

创建测试表:

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

INSERT语句插入5行

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

请让我知道,如果有任何其他实现这一目标的最佳途径

Answer 1:

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

对于SQL Server 2000 +

根据SQL完全参考,第三版(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+上工作。



Answer 2:

试试这个:

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' 


文章来源: SQL Server – inserting multiple rows with single (ANSI style) statement