web-dev-qa-db-fra.com

Mettre à jour les lignes dans la destination OLEDB SSIS

J'ai un processus de flux de données où j'ai une source OLEDB et une destination OLEDB comme ci-dessous:

Data Flow Task

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.

25
Rahul

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
2
Rahul

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

http://www.sqlservercentral.com/Images/11369.png

Définir des mises à jour basées

enter image description here

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.

37
billinkc

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:

  1. Faites glisser la commande OLEDB [au lieu de la destination oledb]
  2. Accéder à la fenêtre des propriétés
  3. Sous Propriétés personnalisées, sélectionnez SQLCOMMAND et insérez la commande update ex:

    UPDATE table1 SET col1 =?, Col2 =? où id =?

  4. mapper les colonnes dans l'ordre exact de la source à la sortie comme dans la commande de mise à jour

17
rs.