通过合并语句键入 SCD 2,用于跟踪没有唯一键的联接表的更改



我有一个表,我想使用T-SQL Merge statement为其创建SCD Type 2,但它没有唯一键。

RoleTaskTable:
RoleID, TaskID
1,A
1,B
1,C
2,A
2,D
2,F
3,A
3,B
3,E
3,F

显然我得到了错误

"The MERGE statement attempted to UPDATE or DELETE the same row more than once. This happens when a target row matches more than one source row. A MERGE statement cannot UPDATE/DELETE the same row of the target table multiple times. Refine the ON clause to ensure a target row matches at most one source row, or use the GROUP BY clause to group the source rows."

当我将RoleIDTaskID组合为临时表和 SCDTable 的唯一索引时,它会将其简单地识别为新记录,因此所有记录(即使删除了一些记录(在 SCD 表中保持标记为活动。

你怎么能解决这样的事情?

我可以显示我为此 SCD 编写的整个代码,但我认为我在这里错过了一些基本的东西。

A 听起来很明显的风险,给表一个唯一的键。 没有一个,它就不是一个适当的关系。 合并旨在处理工作唯一键。

OTOH,由于 Merge 只是插入/更新/删除的一站式商店,您可以使用包装在事务中的单个命令来完成同样的事情。

相关内容

  • 没有找到相关文章

最新更新