2011-11-13 17 views
2

2つのデータベースに2つの同様のテーブルがあります。 DB1のPerson_Table1とDB2のPerson_Table2。 DB2上のPerson_Table1からPerson_Table2への一括挿入が必要です。Sqlの一括挿入方法

両方のタブの列名は似ています。両方の表の列の数が等しい場合も列の数が多いです。どのように私はバルククエリを休閑のように挿入することができます:

insert into DB2.dbo.Person_Table2 (*) (SELECT * FROM DB1.dbo.Person_Table1) 
+1

は近いですが、あなただけの選択と同様に、挿入する列のリストを指定する必要があります。 IE \t氏名\tを選択 DB2.dbo.Person_Table2( \t氏名\t、姓 \t、MiddleName )に挿入、DB1.dbo.Person_Table1 –

+0

@HiawathaティラーI FROM姓 \t、MiddleName それを知っているが、私の列の数が多く、Selectからの使用が欲しい。多くのテーブルでこれを行う。 – Ehsan

+2

テーブル定義がおそらく一致しないために*を使うことはできない。 1つのデータベースからID値や外部キー制約を移動するなど、さまざまな問題があります。カラム名をリストアップするのが正しいアプローチです。 –

答えて

1

私は常に明示的な列名を使用する - などINSERTを実行するときにだけ非常に明確かつ安全である:あなたは、

INSERT INTO DB2.dbo.Person_Table2(Col1, Col2, ...., ColN) 
    SELECT Col1, Col2, ...., ColN 
    FROM DB1.dbo.Person_Table1 

その方法をまた、例えば、ターゲット表の1つの列を例えばあなたが持っているどのような定数値または(GETDATE()か何かのような)SQL関数の値

INSERT INTO DB2.dbo.Person_Table2(Col1, Col2, ...., ColN, ModifyDate) 
    SELECT Col1, Col2, ...., ColN, GETDATE() 
    FROM DB1.dbo.Person_Table1 
+0

私はそれを知っていますが、私のカラム数は多く、 'Select * 'からの使用も欲しいです。多くのテーブルでこれを行います。 – Ehsan

+0

@ehsanzeynali:' * 'は使用しないでください。何らかの理由でテーブルの構造の1つが変化します...はい、少しタイピングが必要ですが、余分な努力がそれに値する! –

+0

この操作のためのソリューションは存在しないという意味ですか? – Ehsan