Bonjour,
Je récupère des données d'un serveur oracle lié et je dois les injecter dans les tables appropriées d'une DB sql server.
Je voudrais éviter d'utiliser un curseur et travailler de manière ensembliste mais je n'arrive pas à visualiser les opérations nécessaires.
Les données en question sont des transactions caisses impliquant des gift-cards ou gift-cheques.
J'en suis au "schéma" suivant :
1 : récupérer les données depuis le serveur lié
2 : récupérer(créer s'il n'existe pas) l'id du/des gifts
3 : insérer dans la table transaction
C'est le point 2 qui me pose problème à priori.
En gros, j'ai une table pour les cartes et une table pour les cheques qui héritent toutes deux leur clef primaire de la table gift (héritage exclusif).
Il est facile de savoir quels gifts existent déjà ou non dans la DB.
Mon gros problème est d'arriver à insérer de manière ensembliste ceux qui n'existe pas encore. Si l'insertion portait sur une seule table, pas de souci. Mais vu qu'il y a héritage, je dois d'abord insérer dans la table parente pour avoir la clef primaire. Du coup, je bloque...
C'est tellement flou que j'ai même du mal à mettre par écrit ce que je n'arrive pas à faire à ce niveau là.
Disons que j'ai 20 cartes qui n'existent pas encore. Je dois donc insérer 20 lignes dans la table parente (gift), récupérer les identifiants qui viennent d'être insérer et les utiliser pour insérer dans la table fille (carte). C'est cela que je ne vois pas comment faire...
[EDIT]
Pour le moment, pour insérer une carte, je fais ceci (via une procédure stockée) :
Déjà rien que l'insertion dans la table T_GIFT_GFT, je ne vois pas comment y insérer plusieurs ligne sans boucle :-/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DECLARE @GFT_ID INT; INSERT INTO DBO.T_GIFT_GFT DEFAULT VALUES; SET @GFT_ID = SCOPE_IDENTITY(); INSERT INTO DBO.T_CARD_CRD(GFT_ID,...) VALUES(@GFT_ID,...)
[/EDIT]
Une fois que les gifts sont créés et que j'ai l'id de chacun, insérer les transactions dans la table du même nom ne pose aucun problème.
Partager