-1

我有一个 CDC 进程设置,其中 TableA 的附加行(或更新)由 ETL 自动拾取并放入 TableB

表A>>CDC>>表B

CDC 工作正常,除了我想在 CDC 进程完成后更新第一个表。我想通过填充“提取日期”来更新表格。所以我的表 A 有,可以说:姓名、年龄、OtherInfo、ExtractionDate。CDC 设置在 Name、Age 和 OtherInfo 列上(extractionDate 列被排除在外)。然后,一旦对 TableA 执行 CDC 并将其带到 TableB,我想用当前日期填充 TableA 的“extractionDate”。但是,鉴于我不知道正在移动哪些行,我很难填充该列。具体来说,当只有 SSIS 知道时,如何创建“选择性”where 子句来选择“更改”行。

4

1 回答 1

0

在表 A 数据库中,有一些系统表是作为启用 CDC 的一部分而创建的。您应该能够轻松找到与表 A 关联的表。这是 MSSQL 跟踪所有更改的地方。

__$start_lsn 是更改发生时间的时间戳,您的 SSIS 导入使用此值来进行一系列更改。lsn_time_mapping 可让您查找时间戳,以便更容易理解。

在我的处理过程中,我存储了开始和结束 lsn 值,因此我知道每次 SSIS 运行都会带来什么。然后我可以使用这些 lsn 值返回到这个 CDC 源表并查看 MSSQL 在该时间跨度内跟踪的所有更改。

请记住,CDC 系统表每隔几天就会自动清理一次 - 因此您将无法在历史上应用此逻辑 - 仅适用于最近的导入。

于 2015-06-09T16:30:14.417 回答