2016-07-25 7 views
0

私はクレームデータをインクリメンタルにインポートしようとしています。 Systemvarchar)とClaimNumvarchar)のソースとターゲットを一致させ、他の列のハッシュを変更して確認します。SQL Server 2008マージステートメント複数の一致条件

私は私のMERGE文(簡易)を持っている:

MERGE target 
USING source ON target.System = source.System 
      AND target.ClaimNum = source.ClaimNum 

WHEN MATCHED AND target.HashValue <> source.HashValue 
THEN {update claim record data} 

WHEN MATCHED AND target.HashValue = source.HashValue 
THEN {update claim record as "checked"} 

WHEN NOT MATCHED 
THEN {insert new claim record} 

しかし、私は2つの一致条件を設定することはできません。どのように私はマージステートメントでこれを達成することができますか?それならば

MERGE target 
USING source 
    ON target.System = source.System 
AND target.ClaimNum = source.ClaimNum 
WHEN MATCHED THEN 
    UPDATE SET column_name = 
      CASE WHEN target.HashValue = source.HashValue THEN ... 
       ELSE ... 
      END 
WHEN NOT MATCHED THEN {insert new claim record} 

EDIT:

この

は、カスタム・ロジックを追加するために、2008年

答えて

0

あなたはCASEまたはIIF(SQL Server 2012の)を使用することができますSQL Server上で使用されていますUPDATEのみで、複数の条件を使用することも、同じ値に設定してスキップすることもできます:

... 
UPDATE SET column_name1 = 
      CASE WHEN condition1 THEN ... 
       ELSE column_name1 
      END 
      ,column_name2 = 
      CASE WHEN condition1 THEN ... 
        WHEN condition2 THEN ... 
        ELSE column_name2 
      END 
      ,... 

注:

ソース/ターゲットHashValueがNULL可能である場合は、COALESCE/ISNULL/adding OR target.HashValue IS NULL...を使用して、それを処理する必要があります。比較演算子はNULLでは機能しません。

+0

ご回答ありがとうございます。しかし、私はmatch文の影響を受ける複数の列を持っています。たとえば、一致条件のcase文のようにする必要があります。 – wk4997

+0

@ wk4997次に、複数のcase文を使用します。それらを更新したくない場合は、同じ値に設定するだけです。 'col_name = CASE WHEN condition THEN ... ELSE col_name END'と各カラムに対して異なる条件 – lad2025

関連する問題