J'ai un processus de flux de données où j'ai une source OLEDB et une destination OLEDB comme ci-dessous:
La source fusionne les données de deux tables intermédiaires et renvoie un ensemble de résultats (disons, 50 000 lignes). Ces 50K lignes sont également présentes dans la table de destination, mais sont d'anciennes données.
SELECT * FROM staging1
UNION
SELECT * FROM staging2
Généralement, dans la destination OLEDB, nous insérons l'ensemble de données renvoyé de la table source vers la table de destination, mais dans mon cas, je dois mettre à jour les anciennes lignes 50K avec ces nouvelles lignes 50K.
Une sorte de mise à jour groupée.
Quelqu'un peut-il me faire savoir comment je peux le faire? J'apprécie ton aide.
Eh bien, j'ai trouvé une solution à mon problème; Mise à jour de toutes les lignes à l'aide d'une requête SQL et d'une tâche SQL dans SSIS comme ci-dessous. Peut aider les autres s'ils font face au même défi à l'avenir.
update Original
set Original.Vaal= t.vaal
from Original join (select * from staging1 union select * from staging2) t
on Original.id=t.id
Vous ne pouvez pas effectuer une mise à jour groupée dans SSIS dans une tâche de flux de données avec les composants OOB.
Le schéma général consiste à identifier vos insertions, mises à jour et suppressions et à pousser les mises à jour et les suppressions vers une ou plusieurs tables de transfert et après la tâche de flux de données, à utiliser une mise à jour basée sur un ensemble ou à supprimer dans une tâche d'exécution SQL. Regardez Andy Leonard's Stairway to Integration Services series . Faites défiler les 3/4 vers le bas de l'article jusqu'à "Mises à jour basées sur les ensembles" pour voir le modèle.
Données de scène
Définir des mises à jour basées
Vous obtiendrez de bien meilleures performances avec un modèle comme celui-ci par rapport à l'utilisation de OLE DB Command
transformation pour tout sauf des quantités insignifiantes de données.
Si vous aimez les outils tiers, je crois que CozyRoc et je sais que PragmaticWorks ont un composant de destination de fusion.
Utilisez Lookupstage pour décider d'insérer ou de mettre à jour. Consultez ce lien pour plus d'informations - http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html
Étapes à suivre pour effectuer la mise à jour:
Sous Propriétés personnalisées, sélectionnez SQLCOMMAND et insérez la commande update ex:
UPDATE table1 SET col1 =?, Col2 =? où id =?
mapper les colonnes dans l'ordre exact de la source à la sortie comme dans la commande de mise à jour