2010-01-01 92 views
0

请首先阅读Update1!这是SSIS的具体问题。插入更新

我有以下任务:

  1. 我需要定期在MySQL在MSSQL中移动从表的数据表B。
  2. 然后需要在表A中更新所有移动的行(更改单个列值)。

我通过创建以下数据流完成了任务1:ADO NET Source - > Data Conversion - > SQL Server Destination。它运作良好。我运行这个查询X分钟。

现在,使用SSIS工具,我该如何更新我刚才在MySQL中编辑“数据流”的行?如果我是使用普通的SQL我做(在MySQL):

更新表mytable的设置状态=“感动” WHERE ...

(这将确保下一次任务1将数据拉出 - 它跳过已经“移动”的所有行)

所以问题是我不知道如何将第二个任务中的WHERE子句与第一个任务的结果集连接起来。

更新1:我对优化更新过程不太感兴趣。我在此简化了它,以强调以下问题:如何在SSIS中实现此。我特别感兴趣的是SSIS中需要使用什么类型的数据/控制流程块。做这种类型的事情

回答

2

我发现,最简单的就是有一个像中间状态:

0 = not moved, 1 = scheduled to move, 2 = moved 
  • 所以,你在源头第一旗行与status = 1
  • 然后将这些行移过
  • 交易成功时,UPDATE myTable SET status = 2 WHERE status = 1

后,您的UPDATE:

你可以只转移了到另一个表CapturedRows在源数据库记录您的目的地和捕捉的ID之前使用组播。在使用后执行SQL任务在源表更新行,如:

UPDATE myTable SET status = 'moved' WHERE ID IN (SELECT ID FROM CapturedRows) 

此之后,你会用另一种执行SQL任务截断CapturedRows表。

你也可以连接OLE DB命令直接在组播,更新记录一个接一个,因为他们流 - 但是这将是相当缓慢。

要使用这个,你就必须设置失败包放在故障数据流任务,以确保其如果插入故障并停止对包交易选项所需,为数据流程以支持。

0
select max(id) from a 

[copy rows to b] 

update a set moved = 1 where id <= ? 
1

方式一:

  1. 复制的数据移动到一个临时表中的源系统上

  2. 移动从临时表中的数据(源)到您的目标系统,就像您现在所做的那样

  3. 更新主源表,其中的ID位于临时表中

  4. 下降临时表

0

为table-a定义了一个on-update触发器,当table-a.status被更改为“moved”时,将该记录插入到表b中。