IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Identity et Insert


Sujet :

Développement SQL Server

  1. #1
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    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

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Points : 89
    Points
    89
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  3. #3
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Expert Base de Données
    Inscrit en
    Janvier 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert Base de Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    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

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 795
    Points : 3 173
    Points
    3 173
    Par défaut
    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.
    MCTS Database Development
    MCTS Database Administration

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion impossible car identity insert défini à off
    Par dubidon dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/06/2007, 15h34
  2. Réponses: 5
    Dernier message: 11/01/2007, 15h10
  3. insertion dans table à colonne unique identity
    Par dev-man dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/01/2007, 17h06
  4. Réponses: 9
    Dernier message: 07/09/2004, 11h12
  5. Insert ds une column identity
    Par Trahwn dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 06/10/2003, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo