2010-04-09 4 views
1

J'ai un package SSIS qui copie les données de la table A vers la table B et définit un indicateur dans la table A afin que les mêmes données ne soient pas copiées ultérieurement. Cela fonctionne très bien en utilisant ce qui suit comme le texte de commande SQL sur l'ADO Net objet Source:SSIS - Mettre à jour l'indicateur des lignes sélectionnées à partir de plusieurs tables

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

Le problème que j'ai est que je dois exécuter un ensemble de données semblables copie mais de la table deux sources, se sont joints à une primaire/foreign key - sélectionnez dans la table A un joint de mise à jour de la table B dans le tableau A.

Je ne pense pas que je puisse utiliser la technique ci-dessus parce que je ne sais pas où je mettrais la jointure!

Existe-t-il un autre moyen de contourner ce problème?

Merci

Rob.

Répondre

1

Vous pouvez utiliser une jointure dans une instruction de mise à jour.

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 

La clé est de ne pas alias les champs sur le côté gauche de l'ensemble, mais d'alias tout le reste. Et utilisez l'alias de table pour la table que vous mettez à jour après le mot clé de mise à jour afin qu'il sache quelle table de la jointure mettre à jour.

+0

Superbe! Je vous remercie –

Questions connexes