Problématique

On veut insérer des données d’une table source vers une table de destination en évitant les doublons.
La question est donc de savoir, comment vérifier si que la donnée existe ou non dans la table de destination
et si oui, comment la mettre à jour.

Lot Upsert

Déroulement

Dans un premier temps nous allons créer la table source

CREATE TABLE [dbo].[TableSource](
[souce_id] [int] NOT NULL,
[source_prenom] [nvarchar](50) NULL,
[source_nom] [nvarchar](50) NULL,
CONSTRAINT [PK_Personnes] PRIMARY KEY CLUSTERED
(
[souce_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Avec comme données :

Table Source

Puis la table de destination

CREATE TABLE [dbo].[TableDestination](
[source_id] [int] NOT NULL,
[prenom_destination] [nvarchar](50) NULL,
[nom_destination] [nvarchar](50) NULL,
CONSTRAINT [PK_TableDestination] PRIMARY KEY CLUSTERED
(
[source_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Avec comme données :

Table Destination

Voici ce que nous allons construire comme lot SSIS :

Lot Upsert

Étape 1 : Configuration de la la source (Composant OLE DB Source)

Créez une nouvelle connexion vers la base de données puis sélectionnez la table source.

Composant Source - OLE DB Source

Étape 2 : Configuration du LookUp

  • Connection

Sélectionnez la table destination.
C’est dans ce composant lookup que nous pourrons savoir si les données sources existent ou pas dans la table de destination.

LookUp Connection

  • Columns

Dans cette partie nous allons lier les champs qui permettent de faire les vérifications.
Dans notre cas nous lions, les deux « source_id ».

Lookup Mapping

  • General

Dans cette partie, nous allons rediriger toutes les lignes qui ne correspondent pas vers la sortie « No match output ».
Ces lignes sont en fait de nouvelles lignes et seront donc insérées dans la table de destination.

Redirect rows to no match output

Etape 3 : Configuration du composant de Destination OLE DB Destination

  • Connection Manager

Insérez un composant « OLE DB Destination » et sélectionnez la table de destination.

Composant Destination - OLE DB Destination

  • Mappings

Liez les champs entre eux.

OLE DB Destination Mapping

Étape 4 : Configuration du composant de mise à jour OLE DB Command

  • Connection Managers

Comporant pour la mise a jour - OLE DB Command

  • Component Properties

Dans la partie « SqlCommand« , entrez la requête de mise à jour des données de la table destination.

Requete Tql Update

  • Column Mappings

Liez les champs de sortie du LookUp avec les paramètres de la requête de mise à jour.

Mapping des parametres de l'update

Exécution du lot

Execution du package

Lors de l’exécution de la requête nous voyons qu’il y a deux lignes ajoutées et deux lignes mises à jour.
Les id 1 et 2 existaient dans la table de destination et ont donc été redirigées vers le composant OLE DB Command,
tandis que les lignes 3 et 4 ont directement été redirigées vers le composant de destination comme étant de nouvelles lignes.

Résultat

Table de destination avant exécution

Table Destination

Après exécution

Résultat fin de traitement de upsert