Cara menyalin baris dari satu tabel SQL Server ke tabel lainnya

93

Saya memiliki dua tabel yang identik dan perlu menyalin baris dari tabel ke tabel lain. Apa cara terbaik untuk melakukannya? (Saya hanya perlu menyalin beberapa baris secara terprogram, saya tidak perlu menggunakan utilitas penyalinan massal).

rp.
sumber

Jawaban:

120

Selama tidak ada kolom identitas Anda bisa saja

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]
Scott Nichols
sumber
23
Hati-hati dengan sintaks ini karena tidak akan berfungsi jika Tabel2 memiliki kolom identitas dan akan rusak di masa mendatang jika Tabel1 pernah berubah tanpa Tabel2 berubah secara sinkron (dibakar saya sebelumnya). Solusi ini mungkin cocok untuk kasus Anda, perhatikan saja pertimbangan ini.
Michael Haren
11
Anda dapat menggunakan SET IDENTITY_INSERT < table > ON(dan SET IDENTITY_INSERT < table > OFF) untuk menonaktifkan sementara kolom identitas pada tabel yang Anda coba masukkan. Bekerja untuk saya mencoba memulihkan beberapa catatan yang hilang di tengah kumpulan data.
nickb
1
bagaimana jika kunci utama dalam tabel1 ada di tabel2 sebagai kunci asing? Saya memiliki hal yang sama, dan saya tidak tahu harus berbuat apa .. di table2 id, foreign-key AS "Technology_idTechnology" dan di tabel 1, ada sebagai "idTechnology" Saya ingin menyalin semua entri dari table1 ke table2, ketika idTechnology cocok di kedua tabel ..
ZelelB
71

Sintaks alternatif:

INSERT tbl (Col1, Col2, ..., ColN)
  SELECT Col1, Col2, ..., ColN
  FROM Tbl2
  WHERE ...

Kueri pemilihan dapat (tentu saja) menyertakan ekspresi, pernyataan kasus, konstanta / literal, dll.

Michael Haren
sumber
2
Ini bagus ketika tabel sedikit berbeda. Saya memiliki beberapa kolom tambahan di tabel kedua saya dan jawaban yang diterima tidak berfungsi dengan MSSQL karena harus identik.
Tony M
39

Jawaban Jarrett membuat tabel baru.

Jawaban Scott dimasukkan ke dalam tabel yang sudah ada dengan struktur yang sama.

Anda juga dapat memasukkan ke dalam tabel dengan struktur berbeda:

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]
ScottStonehouse
sumber
6
@ScottStonehouse: jika Anda mengumpulkan semua jawaban lain ke dalam jawaban ini seperti yang telah Anda lakukan tetapi dengan kode (membuatnya komprehensif), Anda pasti akan menjadi jawaban terbaik.
Michael Haren
6
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 

bekerja di SQL Server

Kaniu
sumber
2
Ini hanya berfungsi jika DestTable tidak ada. Anda akan mendapatkan pesan kesalahan jika DestTable dibuat sebelum kueri ini.
Pengembang Web
2
Sebenarnya gagal jika tabel tujuan tidak ada. Ini dapat menyebabkan kesalahan jika DestTable yang ada tidak kosong.
Kaniu
5
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >
Jarrett Meyer
sumber
1
Apakah ada cara untuk melakukan ini Jika dua tabel ini berada dalam database diff di sql-server.
Naresh
9
Tentu! Cukup memenuhi syarat database. [namaserver]. [skema]. [tabel]. MisalnyaSELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer
4
Ini membuat tabel baru, yang tidak diminta oleh OP.
Conrad