我制作了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)并添加“执行包装”任务,并添加了计数不匹配的条件。
并添加了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。并在下面的结果集中映射,您可以找到我所做的图片。
但是完成所有这些操作后,我得到此错误: [执行SQL任务]错误:向变量“ row_count_src”分配值时发生错误:“分配给变量” User :: row_count_src“的值的类型与当前变量类型不同。变量在执行期间可能不会改变类型。变量类型是严格的,除了Object类型的变量。 “。
答案 0 :(得分:0)
我还没有完全测试过,但是您也许可以做这样的事情。只要您的计数变量彼此不同,就会创建一个包装循环并执行。
我做了什么?
首先我有一个DataFlow Task,它将数据从源移动到 目的地。
然后我有一个Execute SQL任务,该任务基本上计算来自 TableA并将其映射到变量count1例如。源表
然后我有一个Execute SQL任务,该任务基本上计算来自 TableB并将其映射到变量count2例如。目标表
然后我创建一个执行包任务,我也在其中引用它 自。然后我用一个表达式说一个优先约束 Count1!= count2。
因为它们不同,所以您要重新启动任务。如果他们 等于最后一个任务“执行包装”任务将永远不会执行。
希望是那样吗?
答案 1 :(得分:0)
如果我正确理解您的挑战...
在数据流任务中,在源之间使用RowCount转换 和目标以捕获写入目标的行。这个 将存储在变量中。
在控制流中,从日志表中获取可用的最大行数并存储该变量。
创建一个执行程序包任务,该任务执行相同的程序包,并在优先级约束之前放置优先级约束,以与步骤2中来自Step1 <>的变量进行比较。