Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何跟踪通过SSI完成的行插入_Sql Server_Sql Server 2008_Ssis - Fatal编程技术网

Sql server 如何跟踪通过SSI完成的行插入

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包。我再次打

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

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

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


如何实现这一点?

创建一个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年或更高版本)。