sql-server – 使用存档列获取新的和更新的数据

我正在尝试优化一个SSIS包,该包从一个非常大的事务表中检索数据,该事务表每天都会获得数百万条新记录.数据是从安装了SQL Server 2008 Standard Edition的数百个现场服务器中收集的.因此,CDC不能用作企业功能.计划如下:

>归档列,smallint – 0 =新(默认约束),1 =已归档,2 =已更新(触发)
>默认约束存档= 0
>更新触发器Archive = 2
>归档索引,时间戳

然后,SSIS包将获取Archive = 0的所有记录,将这些记录插入目标,然后获取Archive = 2的所有记录,并在目标中更新它们.

我需要帮助的是在SSIS过程完成写入新行或更新行之后将Archive列​​设置为1.设置所有处理的行的最有效方法是什么,而不会触及在初始选择后可能已插入或更新的任何行?

最佳答案
如何使用OUTPUT虚拟表?正确设置事务隔离级别(快照/可序列化),以便您只看到进程开始时的行.

将以下内容用于OLE DB源

UPDATE T SET Archive = 1 OUTPUT DELETED.* FROM Table T WHERE T.Archive = 0;

这会在一个很好的原子操作中更新所有内容,并产生将目标输出生成到数据流缓冲区的副作用.路线到达目的地并完成.很好,很整洁

转载注明原文:sql-server – 使用存档列获取新的和更新的数据 - 代码日志