用于在SSIS中执行SQL任务中重新设定表身份的DBCC命令

时间:2018-10-12 12:29:56

标签: ssis dataflow control-flow dbcc execute-sql-task

我遇到的情况是每天都要加载事实表。

有两个SSIS程序包加载此表。

1)Package1_FullLoad.dtsx-每周日运行,并进行完全刷新

2)Package2_DailyLoad.dtsx-在除星期日外的所有日期运行,仅删除和加载过去14天的数据。

现在,满载程序包(Package1_FullLoad.dtsx)具有一个执行SQL任务,它会截断事实表中的所有行。

然后,数据流从头开始加载事实表。

在这种情况下,事实表的标识值从1开始并以1递增,这很好,没有问题。

但是,对于每日加载程序包(Package2_DailyLoad.dtsx),在DELETE语句(仅删除过去14天的数据)之后,在Execute SQL Task中,设置以下代码:

DBCC CHECKIDENT('dbo.FactTable',RESEED,1) DBCC CHECKIDENT('dbo.FactTable',RESEED)

然后我运行数据流以加载数据,该数据仅插入与过去14天相对应的数据。

假设满负荷后事实表中有10行(以更好地说明这种情况为例),今天删除了3行,今天将插入5行(每天插入和删除)今天加载程序包),新的标识值必须从8开始到12结束。相反,我看到新的标识值从11开始到15结束。

在SSIS执行SQL任务中,此DBCC代码没有任何影响。

此DBCC代码在数据库端的SSMS中正常工作。

关于如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

您可以将标识列中的最大值存储在变量中,然后使用此值执行DBCC CHECKIDENT,因为插入下一行的标识列中的值将是此值加上当前增量。例如

DECLARE @MaxID INT

SET @MaxID = (SELECT MAX(IdentityColumn) FROM dbo.YourTable)

DBCC CHECKIDENT ('dbo.YourTable', RESEED, @MaxID);