我有一个80个字段以北的病人表,其中我需要保存所有字段的历史数据。为了澄清,并非所有字段都“需要”版本控制,尽管决定只保留旧记录的完整副本。
为了澄清,这是一个ETL过程,将在非工作时间进行。
这里似乎有一些方法,虽然我不知道哪一种最适合我,因为我之前没有这样做过。
选项1 :使用SSIS进行SCD实施 Pro:由于我们无论如何都在使用SSIS来获取数据,因此只需继续使用相同的工具就可以了 Con:我在SSIS上读过一些关于SCD性能的文章 - 例如:https://chrisjarrintaylor.co.uk/2012/07/03/ssis-scd-vs-merge-statement-performance-comparison/
选项2 :在tsql语句中使用MERGE
专业:写作简短,易于理解 - 所有步骤都在一个中
Con:如果我们尝试在80多个字段上写条件,可能会很麻烦。我们可能还会在许多字段上执行OR
的性能问题(如果有的话,如果有的话)
以下方法对我有用,虽然以这种方式编写,意味着很长的合并声明:Need help understanding alternatives to scd in SSIS
选项3 :INSERT
所有新记录,使用CTE清理重复项(没有更改的重复项),使用UPDATE
语句停用这些记录哪个改变了
亲:没有凌乱的OR
陈述,写起来也不太难理解 - 表现似乎不是一个问题(我们过去曾使用过CTE方法)
骗局:不知何故,这是一种高度克服的方法
考虑到这些方法,或者您可能拥有的其他方法,是否有一种更容易维护,更好地扩展?
小数据样本 - 源数据中有80多列(我无法控制)和更多行:http://rextester.com/live/AYQUT28070