背景
我想从Source(这从其他地方获取数据)加载8个表的数据到Target . 我的源代码中有一个控制表,每次加载一个表时都会保留条目 . 所以在开始我的SSIS包之前,我需要检查源代码中的控制表是否包含所有8个表的条目 .
SSIS包结构
-
两个变量
RecordCount
(默认为0)&SQLQueryForRecordCount
(用于从控制表获取记录计数的SQL查询) -
执行SQL任务 - 这里我执行select查询以获取记录计数并将结果传递给变量
RecordCount
-
使用
execute sql script
连接数据流时,我选择了Expression as Evaluation Operation
和表达式为@[User::RecordCount] == 8
,以便在RecordCount = 8
时执行数据流 .
到目前为止一切正常 .
问题是我们不确定何时将条目插入源中的控制表(可以在3小时窗口中随时进行) . 所以我想循环第二步(执行sql脚本),直到 RecordCount
变量值达到8,然后启动下一个数据流任务 .
怎么做到这一点?请帮我 .
2 回答
我发现在存储过程中更容易做到这一点,并且更喜欢调整它而无需编辑/部署/推广我的包 .
在SSIS中,您将需要一个调用存储过程的简单执行SQL任务 . 然后对于存储过程,您需要以下内容:
然后,您可以丢弃您的SSIS变量,只需从此proc开始 . 不需要任何限制 .
脚本任务解决方法
您可以使用
Script Task
而不是Execute SQL Task
执行变通方法:在脚本任务中使用
SQLCommand
来检索RecordCount
添加一个While循环,重复
SqlCommand
执行,直到RecordCount = 8
您的代码应如下所示:
recordCount
变量注意:您必须在脚本编辑器中将
User::RecordCount
添加为ReadWriteVariable,将User::SQLQueryForRecordCount
添加为ReadOnly Variable附注:您可以在
While loop
中添加Theading.Thread.Sleep(5000)
命令,为每个命令执行提供更多时间