Hello,
Je suis certain que ce problème est vraiment con si pas trivial mais je sèche...
Voici un peu de code :
Cela se place dans le contexte d'une DB qui modélise des promotions. Ce bout de code fait partie d'une procédure servant à faire une copie d'une promo. La table suffixée par DTD est la table contenant les "fournisseurs en démonstration" (c'est plus complexe que ça mais j'en ai pour 3 page à vous expliquer en détail sinon) qui participe à la promo.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 DECLARE @DTD TABLE( DTD_ID INT PRIMARY KEY, NEW_DTD_ID INT, CONT_ID INT, PRM_ID INT, BA_ID TINYINT, DTD_PRICE_REDUCTION BIT); INSERT INTO S_PROMO.T_DETAIL_DEMO_DTD(CONT_ID, PRM_ID, BA_ID, DTD_PRICE_REDUCTION) OUTPUT DTD_ID, INSERTED.DTD_ID, INSERTED.CONT_ID, INSERTED.PRM_ID, INSERTED.BA_ID, INSERTED.DTD_PRICE_REDUCTION INTO @DTD(DTD_ID, NEW_DTD_ID, CONT_ID, PRM_ID, BA_ID, DTD_PRICE_REDUCTION) SELECT CONT_ID, @NEW_PRM_ID, BA_ID, DTD_PRICE_REDUCTION FROM S_PROMO.T_DETAIL_DEMO_DTD WHERE PRM_ID = @PRM_ID
Je fais donc une copie de ceux qui participe à la promo qu'on veut copier (dont l'id est dans @PRM_ID) et j'ai besoin de récupérer le tout car j'ai besoin des nouveaux ID pour faire les copies de lignes dans la table qui références DTD (où stocker les pourcentages auxquels les lignes de DTD sont promotionnées).
J'ai donc créé une variable table qui contient aussi bien le DTD_ID source et le nouveau DTD_ID que je comptais récupérer via la clause OUTPUT de l'ordre INSERT. Pas de souci pour récupérer le nouvel ID via la pseudo-table INSERTED. Mais pour l'ID "source", pas moyen (la première colonne de la clause OUTPUT). J'ai essayé en donnant un alias à la table DTD et en préfixant DTD_ID par cet alias mais cela ne change rien.
Les exemples que je trouve ça et là sur le net ne s'occupe que de récupérer les données des pseudo-tables INSERTED et DELETED. Jamais de les associer avec les données sources...
Comment faut-il donc procéder ??
EDIT : Je pourrais encore m'en sortir en utilisant la clef alternative que possède la table mais ce serait tellement plus facile si je pouvais récupérer l'id source...
Partager