SSIS - 从多个表更新所选行的标志

时间:2010-04-09 10:07:56

标签: ssis

我有一个SSIS包,它将数据从表A复制到表B,并在表A中设置一个标志,以便随后不复制相同的数据。通过在ADO Net Source对象上使用以下作为SQL命令文本,这非常有用:

update transfer
set ProcessDateTimeStamp = GetDate(), LastUpdatedBy = 'legacy processed'
output inserted.*
where LastUpdatedBy = 'legacy'
and ProcessDateTimeStamp is not null

我遇到的问题是我需要运行一个类似的数据副本,但是从两个源表中加入主/外键 - 从表A中选择连接表B更新标志。

我认为我不能使用上述技术,因为我不知道我在哪里加入!

还有另外一种解决这个问题的方法吗?

由于

罗布。

1 个答案:

答案 0 :(得分:1)

您可以在更新语句中使用联接。

update m 
set ProcessDateTimeStamp = GetDate(), 
    LastUpdatedBy = 'legacy processed', 
    somefield = t.someotherfield
    output inserted.* 
from transfer t
join mytable m 
    on t.id = m.id
where m.LastUpdatedBy = 'legacy' 
    and m.ProcessDateTimeStamp is null 
    and t.ProcessDateTimeStamp is not null 

关键是不要对集合左侧的字段进行别名,而是别名。并在更新关键字后使用要更新的表的表别名,以便它知道要更新的连接表。