【问题标题】:how to track row inserts done via SSIS如何跟踪通过 SSIS 完成的行插入
【发布时间】:2015-01-28 14:53:43
【问题描述】:

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

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 您不确定哪些部分?您似乎确定了大部分需要完成的工作。
  • 好吧,我不知道如何在 SQL Server 或 SSIS 中生成负载 ID。此外,即使在我关闭 SSIS 包之后,我也需要增加此 ID 的计数器。在导入操作期间我将如何填充此 ID?
  • 我想到了几种方法。首先,如果您拥有的只是一个毫无意义的计数器,那么它对您的作用并不大。我认为像审计表这样的东西会更有用。该表可能包含执行包的日期时间或您可能想要跟踪的任何内容。然后您的包可以在该表中插入一行并从新创建的行中获取标识值并使用它。如果您只想要一个数值,请查看使用序列(假设您在 2012 年或之后)。

标签: sql-server sql-server-2008 ssis


【解决方案1】:

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

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

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

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

在执行 SQL 任务中,您将向该表中插入一个值并获取返回的标识值。我将使用 @[System::StartTime] 作为我加载到表中的值,因为这是包开始执行的时间。您将获得返回的 scope_identity() 值并分配给 LoadID https://stackoverflow.com/a/8917892/181965 上有一个示例

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

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 2022-11-19
    • 1970-01-01
    • 2017-09-05
    • 2022-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多