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。
您可以使用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.
| 归档时间: |
|
| 查看次数: |
7304 次 |
| 最近记录: |