我试图以增量方式引入声明数据。我在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上使用。
答案 0 :(得分:1)
您可以使用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
一起使用。