SQL Server – menyisipkan beberapa baris dengan pernyataan tunggal (gaya ANSI).

Saya menggunakan metode berikut untuk menyisipkan beberapa baris menggunakan satu pernyataan INSERT, yaitu gaya ANSI dalam menyisipkan baris. Ini tersedia di SQL Server 2008 dan 2012. Saya tidak yakin dengan SQL Server 2005/2000.

Buat tabel pengujian:

create table TestInsert (ID INT, Name NVARCHAR(50))

Pernyataan INSERT tunggal untuk menyisipkan 5 baris

INSERT INTO TestInsert 
VALUES (1,'a'),
       (2,'b'),
       (3,'c'),
       (4,'d'),
       (5,'e')

Tolong beri tahu saya jika ada cara terbaik lain untuk mencapai ini


person Vinay Kumar Chella    schedule 23.04.2012    source sumber
comment
Gaya penyisipan ini tidak tersedia di SQL Server 2000 dan 2005.   -  person marc_s    schedule 23.04.2012


Jawaban (2)


SQL Server - menyisipkan beberapa baris dengan pernyataan tunggal (gaya ANSI).

Untuk SQL Server 2000+

Menurut SQL Referensi Lengkap, Edisi Ketiga (12 Agustus 2009 ):

1) Sintaks untuk INSERT multibaris adalah

INSERT INTO table-name (columns not mandatory) 
query

(halaman 236, Gambar 10-3).

2) Pernyataan SELECT memiliki klausa FROM yang wajib (halaman 87, Gambar 6-1).

Jadi, dalam hal ini, untuk menyisipkan beberapa baris hanya dengan menggunakan satu pernyataan INSERT kita memerlukan tabel tambahan dengan hanya satu baris:

CREATE TABLE dual(value INT PRIMARY KEY CHECK(value = 1))
INSERT dual(value) VALUES(1)

kemudian

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

Edit 2: Untuk SQL Server 2008+

Dimulai dengan SQL Server 2008 kita dapat menggunakan konstruktor baris: (values for row 1), (values for row 2), (values for row 3), etc. (halaman 218).

So,

INSERT INTO TestInsert 
VALUES (1,'a'), --The string delimiter is ' not ‘...’
       (2,'b'),
       (3,'c'),
       (4,'d'),
       (5,'e')

akan bekerja pada SQL Server 2008+.

person Bogdan Sahlean    schedule 23.04.2012

Coba ini sebagai gantinya:

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' 
person Mahmoud Gamal    schedule 23.04.2012