2016-07-25 79 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