我使用下面的方法使用单个插入多行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')
请让我知道,如果有任何其他实现这一目标的最佳途径
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+上工作。
试试这个:
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'