Sql server 如何跟踪通过SSI完成的行插入
我在SQLServer2008工作。对于给定的数据导入操作,我需要一种方法来跟踪所有数据库表中的行插入。所有行插入都通过SSIS数据流任务(从文本文件导入)完成 当我运行SSIS包时,我需要生成一个唯一的ID来区分给定的运行与同一包的后续运行(包括关闭包) 例如,假设这是我第一次运行SSIS包。文本文件中的所有行都位于数据库中相应的表中。因为这是第一个“加载”,所以我生成一个ID为1。需要在导入的每一行上列出此ID。(我认为最好通过在每个表中添加一个新列来保存此ID)我结束了SSIS包。我再次打开包并运行另一个加载。(不会更新或删除任何行。导入将始终是一个插入/追加操作。)这一次,生成的加载ID为2。此ID将添加到第二次加载期间插入的所有行中Sql server 如何跟踪通过SSI完成的行插入,sql-server,sql-server-2008,ssis,Sql Server,Sql Server 2008,Ssis,我在SQLServer2008工作。对于给定的数据导入操作,我需要一种方法来跟踪所有数据库表中的行插入。所有行插入都通过SSIS数据流任务(从文本文件导入)完成 当我运行SSIS包时,我需要生成一个唯一的ID来区分给定的运行与同一包的后续运行(包括关闭包) 例如,假设这是我第一次运行SSIS包。文本文件中的所有行都位于数据库中相应的表中。因为这是第一个“加载”,所以我生成一个ID为1。需要在导入的每一行上列出此ID。(我认为最好通过在每个表中添加一个新列来保存此ID)我结束了SSIS包。我再次打
如何实现这一点?创建一个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
上有一个例子
现在,在数据流任务中,添加一个派生列,其中插入
@[User::LoadID]插入数据流路径。将其连接到您的目的地,一切正常。您不确定哪些部分?看起来您已经确定了需要完成的大部分工作。我不知道如何在SQL Server或SSIS中生成负载ID。此外,我需要增加此ID的计数器,即使在我关闭SSIS包之后也是如此。在导入操作期间,我将如何填充此ID?我想到了几种方法。首先,如果你所拥有的只是一个毫无意义的计数器,那么它对你并没有多大帮助。我认为像审计表这样的东西会更有用。该表可能包含执行包的日期时间或任何您想要跟踪的内容。然后,您的包可以在该表中插入一行,并从新创建的行中获取标识值并使用它。如果您只需要一个数值,请使用序列查看(假设您在2012年或更高版本)。