一尘不染

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

sql

我正在使用以下方法通过一条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')

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


阅读 144

收藏
2021-03-17

共1个答案

一尘不染

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

对于SQL Server 2000+

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

1)多行INSERT的语法是

INSERT INTO table-name (columns not mandatory) 
query

(第236页,图10-3)。

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

因此,在这种情况下,要仅使用一条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+上使用。

2021-03-17