如何跟踪通过 SSIS 完成的行插入

how to track row inserts done via SSIS

我在 SQL Server 2008 中工作。对于给定的数据导入操作,我需要一种方法来跟踪向我的所有数据库 table 中插入的行。所有行插入都是通过 SSIS 数据流任务完成的(从文本文件导入)。

当我 运行 我的 SSIS 包时,我需要生成一个唯一的 ID 来区分给定的 运行 和以后的 运行 相同的包(可以包括关闭包)。

例如,假设这是我第一次 运行 我的 SSIS 包。文本文件中的所有行都位于我的数据库中相应的 table 中。由于这是第一个 "load",我生成的 ID 为 1。此 ID 需要在导入的每一行中列出。 (我认为最好通过向每个 table 添加一个新列来保存此 ID 来实现这一点。)我关闭了我的 SSIS 包。我再次打开包裹,运行 又装了一包。 (永远不会更新或删除任何行。导入始终是插入/追加操作。)这一次,生成的加载 ID 为 2。此 ID 将添加到第二次加载期间插入的所有行。

我怎样才能做到这一点?

创建一个变量,类型为 Int32 的 LoadID。

创建一个名为 LoadHistory 的 table。这将跟踪您的导入 activity。至少,它看起来像

CREATE TABLE dbo.LoadHistory
(
    LoadHistoryId int identity(1,1) NOT NULL PRIMARY KEY
,   LoadDate datetime NOT NULL
);

您的包现在看起来像执行 SQL 任务 -> 数据流

在执行 SQL 任务中,您将向此 table 中插入一个值并获取返回的标识值。我会使用 @[System::StartTime] 作为我加载到 table 的值,因为这是包开始执行的时间。您将得到返回的 scope_identity() 值并分配给 LoadID

上有一个这样的例子

现在,在您的数据流任务中,添加一个派生列来插入我们的 @[User::LoadID] 进入数据流路径。将其连接到您的目的地,一切都很好。