2011-06-29 9 views
1

それに応じてInsertTableからすべてのデータを挿入または更新して、TargetTableにプッシュしたいとします。 SourceTableに存在しない場合でも、TargetTableから削除するエントリは必要ありません。TSQL - SourceTableからTargetTableへの値の挿入または更新(削除不要)

これはこれまで私が行ってきたことです。 MERGEコマンドはこれに最も適した方法ですか?私はいくつかの例を見てきましたが、これについてどうやって行くかについてはあまりよく分かりません。

現在のソリューションでは、テーブル全体が切り捨てられ、データが挿入されます。私は以来、TargetTableに以前存在していた値のPK値を保持する必要があることを認識しました。 TargetTableのPublicRefId列にAssociatedRefIdが存在するかどうかによって、これをINSERTまたは更新に変更するにはどうすればよいですか?

-- Truncate lancrm01sql's Baseline Official table 
     TRUNCATE TABLE [TargetTable] 

     -- Populate table 
     INSERT INTO [TargetTable] 
     (PublicRefId 
     ,FamilyName 
     ,GivenName 
     ) 
     SELECT 
      AssociatedRefId 
     , lastname 
     , firstname 

     FROM 
      #TempSourceTable 

答えて

2
MERGE TargetTable AS T 
USING #TempSourceTable AS S 
ON (t.PublicRefId = s.AssociatedRefId) 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(PublicRefId, FamilyName, GivenName) VALUES (S.AssociatedRefId, S.lastname, S.firstname) 
WHEN MATCHED 
    THEN UPDATE SET T.FamilyName = S.lastname, T.GivenName = S.firstName 

This article gives a pretty good explanation on using MERGE.

関連する問題