1つのSQL Serverテーブルから別のテーブルに行をコピーする方法


91

2つの同一のテーブルがあり、テーブルから別のテーブルに行をコピーする必要があります。それを行う最良の方法は何ですか?(プログラムで数行だけコピーする必要があります。一括コピーユーティリティを使用する必要はありません)。

回答:


120

ID列がない限り、

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
この構文は、Table2にID列がある場合は機能せず、Table2が同期して変更されずにTable1が変更されると機能しなくなるので、注意してください(以前に書き込みました)。このソリューションはあなたのケースに最適かもしれませんが、これらの考慮事項に注意してください。
マイケルハーレン

11
あなたは使用することができますSET IDENTITY_INSERT < table > ON(そしてSET IDENTITY_INSERT < table > OFF、あなたが挿入しようとしているテーブルの上に一時的に無効にID列に順に)。データセットの途中でいくつかの失われたレコードを復元しようとする私のために働いた。
nickb

1
table1の主キーがtable2に外部キーとして存在する場合はどうなりますか?私は同じことをしているのですが、どうすればよいかわかりません。table2idに外部キーAS "Technology_idTechnology"と表1にあります "idTechnology"としてあります。table1からすべてのエントリをコピーしたいidTechnologyは、両方のテーブルに一致するtable2の..
ZelelB

71

代替構文:

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

選択クエリには、(もちろん)式、caseステートメント、定数/リテラル​​などを含めることができます。


2
これは、テーブルが少し異なる場合に最適です。2番目のテーブルにいくつかの列を追加しましたが、それらは同一である必要があるため、受け入れられた回答はMSSQLでは機能しません。
トニーM

39

ジャレットの答えは新しいテーブルを作成します。

スコットの答えは、同じ構造を持つ既存のテーブルに挿入されます。

異なる構造のテーブルに挿入することもできます:

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

6
@ScottStonehouse:これまでに行ったように他のすべての回答をこの回答にまとめるが、コードを使用して(包括的にする)、間違いなく最良の回答になります。
マイケルハーレン

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

SQL Serverで動作します


2
これは、DestTableが存在しない場合にのみ機能します。このクエリの前にDestTableを作成すると、エラーが発生します。
Web開発者

2
実際には、宛先テーブルが存在しない場合は失敗します。既存のDestTableが空でない場合、エラーが発生する可能性があります。
カニウ

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

1
この2つのテーブルがsql-serverのdiffデータベースにある場合、これを行う方法はありますか?
Naresh

9
承知しました!データベースを完全に修飾します。[サーバー名]。[スキーマ]。[テーブル]。例SELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer、

4
これにより、OPが要求していない新しいテーブルが作成されます。
コンラッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.