我正在尝试以增量方式引入 claim 数据。我在 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
.
关于SQL Server 2008 Merge 语句多匹配条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574695/