2012-04-23 21 views
0

単一のINSERTステートメント、つまり行を挿入するANSIスタイルを使用して複数の行を挿入する方法を使用しています。これは、2005/2000 SQL Server 2008および2012年に、私は、SQL Serverのを確認していないSQL Server - 単一(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では**使用できません**。 –

答えて

2

SQL Serverの - SQL The Complete Reference, Third Edition (August 12, 2009)によるSQL Serverの2000+

のために、単一の(ANSIスタイル)の文

で複数の行を挿入:

1)複数のINSERTの構文は

です。
INSERT INTO table-name (columns not mandatory) 
query 

(page 236、図10-3)。

2)SELECT文にはFROM句が必須です(87ページ、図6-1)。 SQL Serverの2008+について:

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:

ので、このケースでは、我々はauxiliary table with just one rowを必要とするだけで1つのINSERTステートメントを使用して複数の行を挿入します

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' 
関連する問題