【发布时间】:2019-03-26 08:52:47
【问题描述】:
我创建了一个带有脚本组件的 SSIS 包,该组件从 JSON API 调用数据并将其插入到 SQL Server 中的表中。我已经设置了添加新行的逻辑,但是我想找到最合适的方法来删除/覆盖旧行。数据每 4 小时提取一次,因此每次运行包时会有大约 1000 行的重叠。
我的第一个想法是在删除重复行(具有最小 ID 号)的数据流任务之后简单地添加一个 SQL 任务。但是,我想知道如何在数据流任务中执行此操作? API 调用每次获取不超过 5000 行,目标表大约有 1m 行,整个项目大约运行。 10 秒。
我的简单数据流任务如下所示:
【问题讨论】:
-
"有更好的方法吗?"对 Stack Overflow 来说有点离题,因为它可以提供固执己见的答案,就像我即将做的那样。一种方法是将所有数据加载到不同的表中,然后重命名旧表和新表。然后截断旧的,并为每个负载重复循环(因此它们有效地交换名称)。不过,这取决于您的桌子的用途;我们几乎无事可做。
-
我编辑了问题以减少受意见的影响。所以你的意思是我可以创建一个重复交换表和名称的设置?
-
就像它在锡上所说的那样。加载到表中,交换名称,截断旧表。冲洗并重复。
-
如果你每次都复制所有数据,你可以使用分区切换将
rename/truncate进程变成一个耗时几毫秒的元数据操作。否则,您可以将新数据复制到临时表中,并使用 LEFT JOIN 查找目标表中已存在哪些行以及哪些行是新的。
标签: sql-server ssis