Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2011, 16h56   #1
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Par défaut 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
__________________
while (true) echo 'comique';
Du comique de répétition ...
Pour des questions de lisibilité, utilisez la balise [code]
Si votre problème est résolu, n'oubliez pas le tag
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 17h28   #2
Membre du Club
 
Inscription : juin 2007
Messages : 115
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 115
Points : 41
Points : 41
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+
azur668 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 09h24   #3
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
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
__________________
while (true) echo 'comique';
Du comique de répétition ...
Pour des questions de lisibilité, utilisez la balise [code]
Si votre problème est résolu, n'oubliez pas le tag
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 10h01   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 14
Points : 14
Points : 14
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
michaud_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 10h33   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Il faut ajouter vos données dans A...
Puis au moment de l'ajout dans B faire une jointure sur, vous aurez les identity...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h01.


 
 
 
 
Partenaires

Hébergement Web