我正在使用以下方法通过一条INSERT语句插入多行,即插入行的ANSI样式。它在SQL Server 2008和2012中可用。我不确定SQL Server 2005/2000。
INSERT
创建测试表:
create table TestInsert (ID INT, Name NVARCHAR(50))
单条INSERT语句插入5行
INSERT INTO TestInsert VALUES (1,'a'), (2,'b'), (3,'c'), (4,'d'), (5,'e')
请让我知道是否还有其他最佳方法可以实现这一目标
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页)。
(values for row 1), (values for row 2), (values for row 3), etc.
所以,
INSERT INTO TestInsert VALUES (1,'a'), --The string delimiter is ' not 鈥�...鈥� (2,'b'), (3,'c'), (4,'d'), (5,'e')
将可在SQL Server 2008+上使用。