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

MS SQL Server Discussion :

Récupérer la Clé primaire nouvellement créé


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 84
    Points
    84
    Par défaut Récupérer la Clé primaire nouvellement créé
    Bonjour,

    Une nouvelle question forte intéressante pour la route !!

    Quand on fait un INSERT INTO dans une table pour créer un enregistrement.
    Est-ce que l'on peut avoir le résultat de la PK en retour ?

    Exemple :

    TABLE PERSONNE avec PERS_ID en PK, puis champ nom, prenom, age, ...

    (La Clé primaire est auto-incrémentée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO PERSONNE ('TOTO', 'TOTO', 10)
    voilà, il me fera une ligne avec

    PERS_ID = 1 puis ce que j'ai rentré

    voilà, j'aimerais bien récupérer le 1 du PERS_ID !!!

    Classique me direz vous !

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut SCOPE_IDENTITY: Dernière clé primaire
    Salut

    Avec MySql il y a la fonction Scope_Identity().

    J'ai trouvé sur msdn l'équivalent pour SQL Server: SCOPE_IDENTITY()

    Le lien:
    http://msdn.microsoft.com/en-us/library/ms190315.aspx

    Je pense que cela devrait marcher.

    Elx

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 84
    Points
    84
    Par défaut
    Merci mec !

    C'est Nickel !

    T'es un AS !

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Plus généralement, ce que vous pouvez faire avec les auto incréments de SQL Server : http://blog.developpez.com/sqlpro?ti...vec_sql_server

    A +

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 84
    Points
    84
    Par défaut
    Ouaaw c'est encore un truc de Fou !

    Car je travaille avec un serveur de DEV, qui est répliqué !

    En fait, ya 3 Clusters, avec un gros serveur qui réplique sur les 2 autres ...
    Donc le @@IDENTITY me renvoie n'importe quoi ...

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    moi, je lis... et...

    SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions because they return values that are inserted into identity columns.

  7. #7
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 84
    Points
    84
    Par défaut
    C'est bien SCOPE_IDENTITY() et non pas @@IDENTITY !!

    ylarvor > C'est là que c'est Grave !!!
    La MSDN de Micro$oft dis effectivement que :
    SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY are similar functions because they return values that are inserted into identity columns.
    Mais si tu lis le lien de SQLPRO :

    4) récupérer la valeur du dernier auto incrément

    SQL Server dispose de 3 outils pour récupérer la valeur du dernier auto incrément.
    La varibale @@IDENTITY fournit la valeur du dernier auto incrément de la session de l'utilisateur quelque soit la table qui a été auto incrémentée
    La fonction SCOPE_IDENTITY() (pas d'arguement) fournit la valeur du dernier auto incrément de la session de l'utilisateur dans l'étendue de code quelque soit la table qui a été auto incrémentée.

    Exemple :

    INSERT INTO T_CLIENT_CLI (CLI_NOM, CLI_PRENOM) VALUES ('DUVAL', 'Luc');

    SELECT @@IDENTITY AS IDENT,
    SCOPE_IDENTITY() AS SCOP_IDENT,
    IDENT_CURRENT('dbo.T_CLIENT_CLI') AS CURR_IDENT

    IDENT SCOP_IDENT CURR_IDENT
    --------- ------------ ------------
    1000002 1000002 1000002

    La différence entre @@IDENTITY et SCOPE_IDENTITY() est subtile. En effet, si l'insertion dans votre table déclenche un trigger qui insère des données dans une autre table (trigger AFTER INSERT) alors la variable @@IDENTITY contient l'incrément de cet autre table et la fonction SCOPE_IDENTITY() renvoie le dernier incrément visible dans l'unité de code (fonction, trigger, procédure...).

    Démonstration :

    INSERT INTO T_CLIENT_CLI (CLI_NOM, CLI_PRENOM) VALUES ('DUBOIS', 'Marie');

    SELECT @@IDENTITY AS IDENT,
    SCOPE_IDENTITY() AS SCOP_IDENT,
    IDENT_CURRENT('master.sys.databases') AS CURR_IDENT

    IDENT SCOP_IDENT CURR_IDENT
    --------- ------------ ------------
    2 1000003 NULL
    Voilà ...

    Donc Merci Elx38 et le lien de sqlpro [Frédéric] !!

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    les communautés sont donc complémentaires de la documentation microsoft. Je suis content que tu as trouvé ta solution.

  9. #9
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Points : 84
    Points
    84
    Par défaut
    Merci mec !
    Je supporte aussi le FC Nantes et le FC Barça.






  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut SCOPE_IDENTITY et @@IDENTITY
    Je viens moi aussi d'apprendre cette différence très intéressante entre SCOPE_IDENTITY et @@IDENTITY.
    Un grand merci à SQLPro qui malgré son expérience et son niveau prend encore le temps de participer à ces forums.
    Merci à plutonium719 pour sa question et à ylarvor pour ses commentaires.
    Pour info, moi je supporte le club de ma ville le GF38...

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/11/2007, 20h36
  2. Récupérer les clés primaires "perdues"
    Par Dnx dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/07/2006, 17h13
  3. Réponses: 2
    Dernier message: 07/06/2006, 08h42
  4. récupérer la clef primaire d'une table
    Par orionis69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/02/2004, 13h00
  5. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57

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