2010-04-09 2 views
1

У меня есть пакет SSIS, который копирует данные из таблицы A в таблицу B и устанавливает флаг в таблице A, чтобы впоследствии не копировать одни и те же данные. Это прекрасно работает, используя следующее в качестве текста команды SQL на объекте ADO Net Источник:SSIS - Обновить флаг выбранных строк из более чем одной таблицы

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

У меня есть проблема, что мне нужно, чтобы запустить аналогичные данные от копирования, но из таблицы два источника, соединенных на первичной/foreign key - выберите из таблицы A join table B флаг обновления в таблице A.

Не думаю, что я могу использовать технику выше, потому что я не знаю, где бы я присоединился!

Есть ли другой способ обойти эту проблему?

Thanks

Rob.

ответ

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 

Ключом является не псевдоним полей в левой части набора, а псевдоним всего остального. И используйте псевдоним таблицы для таблицы, которую вы обновляете после ключевого слова обновления, чтобы он знал, какая таблица соединения обновляется.

+0

Превосходно! спасибо –

Смежные вопросы