如何比较两个 table 行计数,如果计数匹配则确定,如果不匹配这将重新启动 SSIS 包

How to compare the two table row count , if counts matches than ok if not matches this will restart the SSIS package

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

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 中:- 它只是更新日志 table。

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

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

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

@thomas 按照你的指示我做了以下事情: 1) 我已经为源和目标执行 SQl 任务。 2) 并添加Execute Package 任务并添加不匹配计数的条件。

并添加了检查表达式 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 ;

我已经在 ssis 包中添加了两个变量作为 int64。并在下面的结果集中映射,您可以找到我所做的图片。

但是在完成所有这些之后我收到了这个错误: [执行SQL任务]错误:给变量"row_count_src"赋值时出错:"The type of the value being assigned to variable "User::row_count_src”与当前变量类型不同。变量可能不在执行期间改变类型。变量类型是严格的,除了对象类型的变量。 ".

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

我做了什么?

  1. First i have a DataFlow Task which moves data from source to destination.

  2. Then i have an Execute SQL task which basically counts all rows from TableA and maps it to variable count1 eg. Source table

  3. Then i have an Execute SQL task which basically counts all rows from TableB and maps it to variable count2 eg. Destination Table

  4. Then i create an Execute Package task where i reference it too it self. Then i make a precedence constraint with an expression saying Count1 != count2.

Because if they are different you want to restart the task. If they are equal the last task Execute Package task will never be executed.

希望是那样的吗?

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

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

  2. 在控制流中,从日志中获取可用的最大行数 table 并将其存储在一个变量中。

  3. 创建一个执行相同包的执行包任务,并在 if 之前放置优先约束,比较 if variable from Step1 <> variable in Step2.