Satır bir SQL Server tablosundan diğerine nasıl kopyalanır


94

İki özdeş tablom var ve satırları tablodan diğerine kopyalamam gerekiyor. Bunu yapmanın en iyi yolu nedir? (Programlı olarak sadece birkaç satırı kopyalamam gerekiyor, toplu kopyalama yardımcı programını kullanmam gerekmiyor).

Yanıtlar:


121

Kimlik sütunları olmadığı sürece sadece

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
Bu sözdizimine dikkat edin, çünkü Table2 bir kimlik sütununa sahipse işe yaramayacak ve gelecekte Table2 senkronize olmadan değişmeden Tablo1 değiştiğinde (beni daha önce yaktı) bozulacaktır. Bu çözüm sizin durumunuz için mükemmel olabilir, sadece bu hususlara dikkat edin.
Michael Haren

11
Eklemeye çalıştığınız tablodaki kimlik sütununu geçici olarak devre dışı bırakmak için SET IDENTITY_INSERT < table > ON(ve SET IDENTITY_INSERT < table > OFF) kullanabilirsiniz . Veri kümesinin ortasında birkaç eksik kaydı geri yüklemeye çalışırken benim için çalıştı.
nickb

1
tablo1'deki birincil anahtar tablo2'de yabancı anahtar olarak mevcutsa ne olur? Bende de aynı şey var ve ne yapacağımı bilmiyorum .. table2 id "Technology_idTechnology" olarak yabancı anahtar ve tablo 1'de "idTechnology" olarak var Tablo1'deki tüm girişleri kopyalamak istiyorum tablo2, idTechnology her iki tabloda da eşleştiğinde ..
ZelelB

71

Alternatif sözdizimi:

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

Seçme sorgusu (elbette) ifadeleri, durum ifadelerini, sabitleri / değişmezleri vb. İçerebilir.


2
Tablolar biraz farklı olduğunda bu harika. İkinci tablomda fazladan birkaç sütun var ve kabul edilen yanıt aynı olması gerektiğinden MSSQL ile çalışmıyor.
Tony M

39

Jarrett'ın cevabı yeni bir tablo oluşturur.

Scott'ın cevabı aynı yapıya sahip mevcut bir tabloya eklenir.

Farklı yapıdaki bir tabloya da ekleyebilirsiniz:

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]

6
@ScottStonehouse: Eğer yaptığınız gibi, ancak kodla (kapsamlı hale getirerek) diğer tüm cevapları bu cevaba toplarsanız, kesinlikle en iyi cevap olursunuz.
Michael Haren

6
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 

SQL Server'da çalışır


2
Bu, yalnızca DestTable olmadığında çalışır. DestTable bu sorgudan önce oluşturulursa bir hata alırsınız.
Bir Web Geliştiricisi

2
Hedef tablo yoksa, aslında başarısız olur. Mevcut DestTable boş değilse hatalara neden olabilir.
Kaniu

5
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >

1
Bunu yapmanın bir yolu var mı Bu iki tablo sql-server'daki diff veritabanlarında ise.
Naresh

9
Elbette! Sadece veritabanını tam olarak nitelendirin. [sunucuadı]. [şema]. [tablo]. ÖrneğinSELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer

4
Bu, OP'nin istediği şey olmayan yeni bir tablo yaratır.
Conrad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.