SQL Server 2008 Merge 语句多匹配条件

wk4*_*997 6 sql t-sql sql-server merge sql-server-2008

我正在尝试以增量方式引入索赔数据。我在System( varchar) 和ClaimNum( varchar)上匹配源和目标,并使用其他列的散列来检查更改。

我有我的合并语句(简化):

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}
Run Code Online (Sandbox Code Playgroud)

但是,我不能有 2 个匹配的条件。我还可以如何使用合并语句完成此操作?

这用于 SQL Server 2008。

Luk*_*zda 2

您可以使用CASEor IIF(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}
Run Code Online (Sandbox Code Playgroud)

编辑:

如果只是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
           ,...
Run Code Online (Sandbox Code Playgroud)

笔记:

如果源/目标HashValue可为空,您应该使用 来处理它COALESCE/ISNULL/adding OR target.HashValue IS NULL...。比较运算符不适用于NULL.