2012-11-16 9 views
5

ステージングテーブルを使用して検証を実行し、ライブに挿入します。SQL Server - ステージングテーブルからデータをコピー

私はステージング表からデータを転送する手順を記述する必要が

TABLE Persons_Staging 
(
Id int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
HouseNumber varchar(255), 
) 

を次のように私はテーブルにPERSONS

TABLE Persons 
(
Id int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
HouseNumber int, 
) 

ステージング表を持っていると仮定ライブテーブルが重複しないようにします。それをどうすれば実現できますか?事前に

おかげで

+1

私は手動年間、このような何かをやって、持っていませんこの種の仕事を全く生産的でないものと見なすようになりました。これは現時点ではオプションではないかもしれませんが、長期的には、データベース比較ツールの入手を検討してください。これらはすべての重労働を行うように設計されており、自由に開発作業に集中することができます。私はRedgateのツールを使用します。彼らには無料トライアルがあります。 http://www.red-gate.com –

答えて

9

MERGEコマンドを使用します。

このような何か:

MERGE 
    INTO Persons AS TARGET 
    USING Persons_Staging AS SOURCE 
    ON TARGET.ID = SOURCE.ID 
    --WHEN MATCHED 
    -- THEN UPDATE??? 
    WHEN NOT MATCHED BY TARGET 
     THEN INSERT (Id , LastName , FirstName, HouseNumber) 
    VALUES (SOURCE.Id , SOURCE.LastName , SOURCE.FirstName, SOURCE.HouseNumber) 
    -- WHEN NOT MATCHED BY SOURCE 
    -- THEN DELETE??? 
; 

をあなたがUPDATE部分のコメントを外し、既存のレコードを更新し、適切な更新句を追加したい場合。削除部分と同じです。

+1

「MERGE」コマンドの完全な使用例を+1してください! –

+0

ありがとう、私はMERGEコマンドを使用してこれを動作させることができました! – dopplesoldner

0

これは、両方のテーブルの左外部結合でこれを使用して、同じではないすべてのデータを取得できます。そのデータは、あなたがして、これがもののこの種のために作られたツールがある一方で、仕事ができる

INSERT INTO Tab1(front,end,number) 
SELECT first,last,nr from tab2 LEFT OUTER JOIN tab1 ON front = first AND last = end AND convert(int,number) = CONVERT(int,nr) 
WHERE tab1.ID is null 

あなたの列に挿入することができます