SSIS : Insérer une ligne dans une table avec IDENTITY et récupérer l’identifiant

Dans les bases de données relationnelles, il est courant d’avoir des identifiants techniques au niveau de chaque table s’appuyant sur la notion d’IDENTITY, c’est-à-dire de compteur auto-incrémenté. Lorsque l’on cherche à remplir des tables via SQL Server Integration Services (SSIS), il convient donc de récupérer cet auto-incrément lors des insertions pour pouvoir les utiliser dans les tables filles.

Plusieurs solutions sont possibles pour implémenter ce besoin dans SSIS. Voici une proposition, qui ne se prétend pas la plus rapide sur de fortes volumétries, mais qui a au moins l’avantage d’être simple d’implémentation.

Tout d’abord, voici la structure que nous utiliserons dans cet exemple :

CREATE TABLE Mere(IdMere int identity PRIMARY KEY,
					NomMere nvarchar(100))
CREATE TABLE Fille(IdFille int identity,
					IdMere int CONSTRAINT FK FOREIGN KEY REFERENCES Mere(IdMere),
					NomFille nvarchar(100))

C’est dans ces deux tables Mere et Fille que nous chercherons à enregistrer les données présentées dans le fichier XML suivant :

XML

Le package SSIS proposé s’appuie uniquement sur un flux de données, qui a la structure suivante :

PackageLe début du processus est une simple lecture du fichier XML, dont le détail ne présente pas d’intérêt ici.

Il y a ensuite l’ajout d’une colonne dans le flux de gauche. Il s’agit de créer une colonne destinée à contenir l’identifiant technique IdMere (colonne IDENTITY de la table Mere).

AjoutColonneEnsuite, il y a l’insertion à proprement parler dans la table Mere. Mais cette insertion se fait en récupérant la valeur de l’auto-incrément créé par le système.

AjoutMere1

AjoutMere2AjoutMere3Dès lors on a en sortie de ce composant d’ajout à la fois l’identifiant interne SSIS de l’entité Mere (Mere_Id, issu de la décomposition du contenu XML) et la valeur de l’auto-incrément IdMere, qui devra être ajouté dans la table Fille. On effectue donc deux tris sur la colonne Mere_Id, pour ensuite fusionner les deux tables via une jointure sur cette colonne.

Fusion

On peut enfin insérer les colonnes dans la table Fille, puisque l’on a désormais à la fois le Nom de l’entité Fille et l’identifiant de lien (clé étrangère) vers l’entité Mère.Insert

Voici donc la présentation d’une solution SSIS qui permet d’obtenir une insertion à la fois des données et la table Mère et de la table Fille, avec une liaison de clé étrangère sur une colonne d’auto-incrément. ResultatA noter toutefois que ce fonctionnement traite les enregistrements à insérer dans la table Mere à l’unité, et n’est donc pas nécessairement optimal dans les cas d’insertions massives.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Contrôle de sécurité * Délai de réponse expiré. Merci de compléter à nouveau le code de contrôle.