-
Identity et Insert
Bonjour,
Dans la conception d'une base de données, je déclare dans une table A une clé primaire PK_A IDENTITY qui va devenir clé étrangère dans une table B.
La table B possède une clé primaire PK_B IDENTITY elle aussi.
En plus des clés primaires des ces deux tables, j'ai déclaré des clés métiers gérées à travers des index et des contraintes UNIQUE KEY.
Ma question est lorsque j'insère des données dans la TABLE B, il faut que je récupère la PK_A de la table B car celle-ci est clé étrangère. Ceci implique de consulter la table A, retourné les PK_A que l'on veut insérer dans la TABLE B ...
Peux-t-on récupérer les IDENTITY d'une table parent lors de l'insertion dans une table enfant, avec des TRIGGERS ou autres ... ?
Merci d'éclairer ma lanternes ?
Cordialement
-
Bonjour,
Forcément si tu insère une ligne dans B, et que tu veux la relier à A,
tu dois fournir la valeur de PK_A à inserer dans B.
Aucun Trigger ne pourra deviner à ta place à quelle ligne de A tu veux relier l'enregistrement que tu es en train d'inserer dans B.
Maintenant, si tu insère dans B à partir de A
Code:
insert into B (B.FK_A) Select A.PK_A from A
pour éviter d'indiquer explicitement le nom de ta colonne PK_A, tu peux utiliser à la place la propriété A.$IDENTITY, qui est équivalent à A.PK_A:
Code:
insert into B (B.FK_A) Select A.$IDENTITY from A
mais je ne pense pas que ce soit cela ton problème.
Si tu pensait à autre chose, précise plus ta question.
A+
-
Bonjour,
Ce n'est pas vraiment un problème mais l'idée proposée correspond.
En fait, je veux éviter aux utilisateurs lors de l'insertion de données dans la table B, de récupérer la FOREIGN KEY dans A pour ensuite insérer dans B les lignes de données.
Je souhaiterai faire cette opération automatiquement. Cette requête fonctionnerait :
Code:
INSERT INTO B (B.FK_A) SELECT A.$IDENTITY FROM A
mais le seul problème c'est que j'utilise BULK INSERT pour faire de l'importation en bloc.
Cordialement
-
Dans ce genre de problème il faut toujours se reposer des questions sur ce que l'on veut.
A mon avis, le mode opératoire
- Insertion des data A dans la table A
- Insertion des data B dans une table temporaire tmp B
- Insertion des data de tmp B dans la table B, avec une jointure sur la table A pour obtenir le pk_A
-
Il faut ajouter vos données dans A...
Puis au moment de l'ajout dans B faire une jointure sur, vous aurez les identity...