如何比较两个表的行数,如果计数匹配,如果不匹配,则比较确定,否则将重新启动SSIS程序包

时间:2018-08-27 09:30:20

标签: ssis ssis-2012 ssis-2008

我制作了ssis软件包,在其中制作了增量数据的数据流。源服务器IP和目标服务器IP是不同的。您可以在下面找到我的包裹的流程图Control flow diagram Data flow diagram 这个包工作正常。 在执行SQl任务中:-它控制日志表并启动增量任务 我使用的查询是:-

insert into audit_log (
Packagename,
process_date,
start_datetime,
end_datetime,
Record_processed,
status
)values('CRM-TO-TRANSORGDB',null,GETDATE(),null,null,null);

select MAX(ID) as ID,MAX(process_date) as proc_date  from audit_log where Packagename ='CRM-TO-TRANSORGDB' ; 

将ID和proc_date存储在变量中。

在执行SQl任务1:-中,它只是更新日志表。

UPDATE audit_log
SET
process_date=?,
end_datetime = GETDATE(),
status='SUCCESS'
record_processed=?
WHERE (packagename = 'CRM-TO-TRANSORGDB') AND ID=? ;

这是我们用来更新日志表的查询。

在简单的数据流中,获取所有记录并将其放入目标表中。 这一切我都做了。
但是我的问题是: 1)如何比较总数ssis包中从源表到目标表的行计数的总和。 2)如果不匹配,它将自动重新启动我的任务。

@thomas根据您的指示,我做了以下事情: 1)我已经为源和目标执行了执行SQl任务。 2)并添加“执行包装”任务,并添加了计数不匹配的条件。

add the execute SQL Task for the source and destination

并添加了check row_count_src!= row_count_dest的表达式

在Source_table_count中,我使用了以下查询:

select count(SubOrderID) as row_count_src from fact_suborder_journey 
WHERE Suborderdate between '2016-06-01' and GETDATE()-1 ;

在dest_table_count中,我使用了以下查询:

select count(SubOrderID) as row_count_dest from fact_suborder_journey 
WHERE Suborderdate between '2016-06-01' and GETDATE()-1 ;

我在此sis包中添加了两个变量int64。并在下面的结果集中映射,您可以找到我所做的图片。 variable assignments Result_set

但是完成所有这些操作后,我得到此错误: [执行SQL任务]错误:向变量“ row_count_src”分配值时发生错误:“分配给变量” User :: row_count_src“的值的类型与当前变量类型不同。变量在执行期间可能不会改变类型。变量类型是严格的,除了Object类型的变量。 “。

2 个答案:

答案 0 :(得分:0)

我还没有完全测试过,但是您也许可以做这样的事情。只要您的计数变量彼此不同,就会创建一个包装循环并执行。

我做了什么?

  
      
  1. 首先我有一个DataFlow Task,它将数据从源移动到   目的地。

  2.   
  3. 然后我有一个Execute SQL任务,该任务基本上计算来自   TableA并将其映射到变量count1例如。源表

  4.   
  5. 然后我有一个Execute SQL任务,该任务基本上计算来自   TableB并将其映射到变量count2例如。目标表

  6.   
  7. 然后我创建一个执行包任务,我也在其中引用它   自。然后我用一个表达式说一个优先约束   Count1!= count2。

  8.   
     

因为它们不同,所以您要重新启动任务。如果他们   等于最后一个任务“执行包装”任务将永远不会执行。

希望是那样吗?

enter image description here

答案 1 :(得分:0)

如果我正确理解您的挑战...

  1. 在数据流任务中,在源之间使用RowCount转换 和目标以捕获写入目标的行。这个 将存储在变量中。

  2. 在控制流中,从日志表中获取可用的最大行数并存储该变量。

  3. 创建一个执行程序包任务,该任务执行相同的程序包,并在优先级约束之前放置优先级约束,以与步骤2中来自Step1 <>的变量进行比较。