2008-09-11 21 views

答えて

92

限り何のID列が存在しないようすることができますだけで

INSERT Table2 
SELECT * FROM Table1 
WHERE [Conditions] 
+19

この構文は、Table2にID列がある場合にはうまく動作しないので、Table2が同期して変更されずにTable1が変更された場合、将来破損します。この解決法は、あなたのケースには完璧かもしれませんが、これらの考慮点に留意してください。 –

+8

挿入しようとしているテーブルのID列を一時的に無効にするには、 'SET IDENTITY_INSERT < table > ON'(および' SET IDENTITY_INSERT < table > OFF')を使用できます。データセットの途中でいくつかの不足しているレコードを復元しようと私のために働いた。 – nickb

+1

table1の主キーがtable2に外部キーとして存在する場合はどうなりますか?私は同じことを持っていると私は何をすべきかわからない..テーブル2のidの外来キー "Technology_idTechnology"とテーブル1で、それは "idTechnology"としてそこにあるtable1からすべてのエントリをコピーしたいidTechnologyが両方のテーブルで一致する場合は、table2。 – ZelelB

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

この二つの表は、SQLサーバにおける差分データベースにある場合はこれを行うにはどのような方法があります。 – Naresh

+9

データベースを完全に修飾するだけです。 [サーバー名]。[スキーマ]。[テーブル]。例えば、SELECT * INTO [SQLTEST]。[dbo]。[EMPLOYEES] FROM [SQLPROD]。[dbo]。[EMPLOYEES] ' –

+3

これはOPが求めているものではない新しいテーブルを作成します。 – Conrad

62

代替構文:

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

(もちろん)は、式、case文、定数を含むことができ、選択クエリ/リテラル​​など

+1

これは、テーブルがわずかに異なる場合に最適です。 2番目のテーブルにいくつか余分な列があり、一致する必要があるので、受け入れられた答えはMSSQLでは機能しません。 –

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

はSQL Serverで動作します

+2

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

+1

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

33

Jarrettの回答が新しいテーブルを作成します。

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

また、異なる構造を持つテーブルに挿入することができます

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

@ScottStonehouse:あなたがこのような答えを他のすべてのものとして集めた場合、コードを使って(包括的に)、あなたは最高の答えになるはずです。 –

関連する問題