2012-04-23 73 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'