Saya tahu saya telah melakukan ini sebelum tahun lalu, tetapi saya tidak dapat mengingat sintaksnya, dan saya tidak dapat menemukannya di mana pun karena menarik banyak dokumen bantuan dan artikel tentang "impor massal".
Inilah yang ingin saya lakukan, tetapi sintaksnya tidak tepat benar ... tolong, seseorang yang telah melakukan ini sebelumnya, bantu saya :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Saya tahu bahwa ini dekat dengan sintaks yang tepat. Saya mungkin memerlukan kata "BULK" di sana, atau sesuatu, saya tidak ingat. Ada ide?
Saya memerlukan ini untuk database SQL Server 2005. Saya sudah mencoba kode ini, tetapi tidak berhasil:
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
Saya mengerti Incorrect syntax near the keyword 'VALUES'.
sql-server
tsql
sql-server-2005
insert
Timothy Khouri
sumber
sumber
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
"VALUES" hanya muncul sekali dan Anda perlu koma di antara set.Jawaban:
Untuk SQL Server 2008, dapat melakukannya dalam satu klausa NILAI persis seperti pernyataan dalam pertanyaan Anda (Anda hanya perlu menambahkan koma untuk memisahkan setiap pernyataan nilai) ...
sumber
INSERT table (columnlist)
select
Anda membuat satu set dengan kolom dan baris, dan dengan desain baris ini dapatinsert
diedit ke tabel lain dengan jumlah kolom yang sama. Anda bahkan dapat menggunakan campuran literal dan nilai-nilai. Misalnya, menggunakaninsert
denganselect 'A', ID from ATable
akan memasukkan 'A' di kolom pertama setiap kali dan nilai kolom ID dari baris ATable yang sesuai di kolom kedua.Sintaks Anda hampir berfungsi di SQL Server 2008 (tetapi tidak di SQL Server 2005 1 ):
1 Ketika pertanyaan dijawab, itu tidak dibuat jelas bahwa pertanyaan itu merujuk ke SQL Server 2005. Saya meninggalkan jawaban ini di sini, karena saya percaya itu masih relevan.
sumber
Jika data Anda sudah ada di database Anda, Anda dapat melakukan:
Jika Anda perlu mengode data, SQL 2008 dan versi yang lebih baru memungkinkan Anda melakukan hal berikut ...
sumber
Menggunakan
INSERT INTO ... VALUES
sintaksis seperti dalam jawaban Daniel Vassallo ada satu batasan yang mengganggu:Cara termudah untuk menghilangkan batasan ini adalah dengan menggunakan tabel turunan seperti:
LiveDemo
Ini akan bekerja mulai dari SQL Server 2008+
sumber
C. Specifying multiple values as a derived table in a FROM clause
Anda bisa melakukan ini (jelek tapi berhasil):
sumber
Ini akan mencapai apa yang Anda tanyakan:
Untuk pengembang masa depan, Anda juga dapat menyisipkan dari tabel lain :
Atau bahkan dari beberapa tabel :
sumber
Anda bisa menggunakan gabungan:
sumber
Ini terlihat OK untuk SQL Server 2008. Untuk SS2005 & sebelumnya, Anda perlu mengulangi pernyataan VALUES.
EDIT :: Buruk saya. Anda harus mengulangi 'INSERT INTO' untuk setiap baris di SS2005.
sumber
Akan lebih mudah untuk menggunakan XML dalam SQL Server untuk memasukkan banyak baris jika tidak maka akan sangat membosankan.
Lihat artikel lengkap dengan penjelasan kode di sini http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Salin kode berikut ke server sql untuk melihat sampel.
sumber
ATAU ANDA BISA MENGGUNAKAN CARA LAIN
sumber
Saya telah menggunakan yang berikut ini:
Ini akan menambahkan sepuluh baris dengan GUID unik untuk ID dan Nama.
Catatan: jangan akhiri baris terakhir (GO 10) dengan ';' karena akan menimbulkan kesalahan: Terjadi kesalahan penulisan skrip yang fatal. Sintaks yang salah ditemui saat mem-parsing GO.
sumber
Sesuai dengan INSERT (Transact-SQL) (SQL Server 2005) Anda tidak dapat menghilangkan
INSERT INTO dbo.Blah
dan harus menentukan setiap kali atau menggunakan sintaks / pendekatan lain,sumber
Ini bekerja sangat cepat, dan efisien dalam SQL. Misalkan Anda memiliki Table
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Jadi Anda tidak bisa menyisipkan beberapa catatan dalam tabel ini menggunakan kueri berikut tanpa mengulangi pernyataan insert,
Juga Dengan C # menggunakan
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Anda dapat memasukkan 10 baris sekaligus
sumber
Dalam menyisipkan multitable, Anda menyisipkan baris dihitung yang berasal dari baris yang dikembalikan dari evaluasi subquery ke dalam satu atau beberapa tabel.
Masukkan tanpa syarat SEMUA : - Untuk menambahkan beberapa baris ke tabel sekaligus, Anda menggunakan bentuk pernyataan INSERT berikut ini:
Tentukan SEMUA diikuti oleh multiple insert_into_clauses untuk melakukan insert multitable tanpa syarat. Oracle Database mengeksekusi setiap insert_into_clause sekali untuk setiap baris yang dikembalikan oleh subquery.
Baris permintaan tunggal
sumber
Lainnya di sini telah menyarankan beberapa sintaks multi-record. Menguraikan hal itu, saya sarankan Anda memasukkan ke dalam tabel temp pertama, dan masukkan tabel utama Anda dari sana.
Alasannya adalah memuat data dari kueri bisa memakan waktu lebih lama, dan Anda mungkin akhirnya mengunci tabel atau halaman lebih lama dari yang diperlukan, yang memperlambat kueri lain yang berjalan melawan tabel itu.
Selain itu, ID Anda mungkin harus berupa identitas (1,1) dan Anda mungkin tidak boleh memasukkannya, dalam sebagian besar keadaan. Biarkan SQL memutuskan hal itu untuk Anda.
sumber