繁体   English   中英

SQL Server 2008合并语句多个匹配条件

[英]SQL Server 2008 Merge Statement Multiple Match Conditions

我试图以增量方式引入索赔数据。 我在Systemvarchar )和ClaimNumvarchar )上匹配源和目标,并使用其他列的哈希来检查更改。

我有我的合并声明(简化):

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上使用的。

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM