sql-server - 检查数据库表中的条目后运行 SSIS 包

标签 sql-server ssis sql-server-2012 etl ssis-2012

背景

我想将 8 个表的数据从 Source (这从其他地方获取数据) 加载到 Target。我的源代码中有一个控制表,每次加载表时都会维护条目。因此,在我开始我的 SSIS 包之前,我需要检查源中的控制表是否包含所有 8 个表的条目。

SSIS 包结构

  1. 两个变量 RecordCount(默认为 0)和 SQLQueryForRecordCount(从控制表获取记录计数的 SQL 查询)
  2. 执行 SQL 任务 - 我在这里执行选择查询以获取记录计数并将结果传递给变量 RecordCount
  3. 在使用执行 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/

相关文章:

sql - 删除给定键总和为零的行

python - 连接 python 和 sql server 2012

sql-server - 如何使用查询表达式 crm 进行内连接

sql-server - 从 sql 修改 SSIS 目录中的连接管理器信息

file-upload - 如何在SSIS中通过FTP任务上传多个文件

sql - 多个 CTE where 子句引用 CTE 列

sql-server - 具有选择和空检查的情况

sql - 如何在不影响原始数据库的情况下将现有备份从现有数据库还原到新数据库?

ssis - 抑制未使用输出列的 SSIS 警告

c# - 参数化查询需要未提供的参数 p1