我在SQL Server 2008中工作。我需要一种方法来跟踪行插入到我的所有数据库表中以进行给定的数据导入操作。所有行插入都是通过SSIS数据流任务完成的(从文本文件导入)。
当我运行我的SSIS包时,我需要生成一个唯一的ID来区分给定的运行与同一个包的后续运行(可能包括关闭包)。
例如,假设这是我第一次运行SSIS包。文本文件中的所有行都位于我的数据库中的相应表中。由于这是第一个“加载”,因此我生成ID为1.此ID需要在导入的每一行上列出。 (我认为最好通过在每个表中添加一个新列来保存此ID。)我关闭了我的SSIS包。我再次打开包并运行另一个加载。 (不会更新或删除任何行。导入将始终是插入/追加操作。)这次,生成加载ID为2。此ID将添加到第二次加载期间插入的所有行。
我怎样才能做到这一点?
答案 0 :(得分:0)
创建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]进入数据流路径。连接目的地的电线都很好。