[英]SQL Server 2008 Merge Statement Multiple Match Conditions
我试图以增量方式引入索赔数据。 我在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}
但是,我不能有2个匹配条件。 我怎样才能通过合并声明来实现这一目标?
这是在SQL Server 2008上使用的。
您可以使用CASE
或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}
编辑:
如果只是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.