2016-07-25 74 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分相匹配的條件。如何通過合併聲明完成此操作?

這是正在SQL Server上使用2008

回答

0

你可以使用CASEIIF(SQL Server 2012中)來添加自定義邏輯:

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} 

編輯:

如果只有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爲空,你應該使用COALESCE/ISNULL/adding OR target.HashValue IS NULL...處理。比較運算符不適用於NULL

+0

感謝您的回覆;不過,我有多個受匹配語句影響的列。例如,我需要有一個匹配條件的case語句,你知道嗎? – wk4997

+0

@ wk4997然後,您使用多個case語句,並且如果您不想更新它們,只需設置爲相同的值'col_name = CASE WHEN condition THEN ... ELSE col_name END',並且每個列可以有不同的條件 – lad2025