我有一个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更新标志。
我认为我不能使用上述技术,因为我不知道我在哪里加入!
还有另外一种解决这个问题的方法吗?
由于
罗布。
答案 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
关键是不要对集合左侧的字段进行别名,而是别名。并在更新关键字后使用要更新的表的表别名,以便它知道要更新的连接表。