背景
我想将 8 个表的数据从 Source (这从其他地方获取数据) 加载到 Target。我的源代码中有一个控制表,每次加载表时都会维护条目。因此,在我开始我的 SSIS 包之前,我需要检查源中的控制表是否包含所有 8 个表的条目。
SSIS 包结构
- 两个变量
RecordCount
(默认为 0)和SQLQueryForRecordCount
(从控制表获取记录计数的 SQL 查询) - 执行 SQL 任务 - 我在这里执行选择查询以获取记录计数并将结果传递给变量
RecordCount
- 在使用
执行 sql 脚本
连接数据流时,我选择了Expression as Evaluation Operation
和 expression 作为@[User::RecordCount] == 8
以便在RecordCount = 8
时执行数据流。
到目前为止一切正常。
问题是我们不确定何时将条目插入到源中的控制表中(可以在 3 小时窗口内的任何时间完成)。所以我想循环第二步(执行 sql 脚本)直到 RecordCount
变量值达到 8,然后开始下一个数据流任务。
如何实现?请帮助我。
最佳答案
我发现在存储过程中更容易执行此操作,并且还更喜欢无需编辑/部署/升级我的包即可对其进行调整的功能。
在 SSIS 中,您需要一个调用存储过程的简单执行 SQL 任务。 然后对于存储过程,你会想要这样的东西:
DECLARE @CountProcessed int
SELECT @CountProcessed = SUM(ControlField)
FROM ControlTable
WHILE @CountProcessed <> 8
BEGIN
WAITFOR DELAY 00:01:00 --Set to whatever time increment you want to wait
SELECT @CountProcessed = SUM(ControlField)
FROM ControlTable
END
然后您可以丢弃您的 SSIS 变量,并简单地从这个过程开始。无需约束。
关于sql-server - 检查数据库表中的条目后运行 SSIS 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189049/