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 :

IDENT_CURRENT en SQL-2005


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 19
    Par défaut IDENT_CURRENT en SQL-2005
    J'utilise l'a fonction IDENT_CURRENT('Nom de la table') afin de connaitre le dernier identifiant d'une table.
    Une table ayant été copiée de SQL-2000 vers 2005, le compteur d'identité actuel et celui utilisé par IDENT_CURRENT se sont désynchronisés. En effet quand j'insère manuellement dans une table. L'ident suis bien la logique donc le numéro d'ID est correct mais pas celui retourné par la fonction en sujet.

    J'ai donc un écart entre la valeur du champ identité et la valeur retournée par IDENT_CURRENT.

    J'ai consulté la documentation SQL-2005 et il est clairement indiqué dans la rubrique IDENT_CURRENT que ce genre de problème existe notamment avec une violation de type IGNORE_DUP_KEY.

    Est-ce un bug et y a t'il moyen de resynchroniser les deux compteurs?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Là n'est pas le problème. Le problème vient plutôt de la portée de la fonction. Que voulez-vous faire ?
    Connaître le dernier auto incrément attribué DANS VOTRE SESSION et dans le code local ? (et quelque soit la table) => @@IDENTITY
    Connaître le dernier auto incrément attribué à une table spécifique dans n'importe quelle session ? => IDENT_CURRENT
    Connaître le dernier auto incrément attribué à une table spécifique DANS VOTRE SESSION quelque soit la portée du code => SCOPE_IDENTITY
    Si vous avez inséré des lignes en débranchant l'auto incrément et en forçant une valeur dans la colonne avec attribut IDENTITY, alors vous devez forcément connaître la dernière valeur.

    Dans tous les cas, vous avez la possibilité de retrouver ce que vous voulez.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 19
    Par défaut
    J'utilise des enregistrements avec une colonne de référence qui reprend l'ID pour un chaînage parent enfant.

    J'ai donc besoin dans certain cas de connaître le dernier identity afin de pouvoir insérer un enregistrement qui puissent se pointer lui même ceci crée le parent.
    Le problème vien du fait que je dois calculer le numéro de l'ID que je vais insérer avant l'insert.
    pour être plus clair je dois avoir un enregistrement du genre ID=1040 parent=1040 dès l'insertion.
    J'utilise IDENT_CURRENT('TABLE') + IDENT_INCR('TABLE').
    Mon scope est donc limité a une table bien précise.
    Cette appel fonctionne très bien en SQL2000 mais pas en SQL2005.
    Dans mon cas les inserts se font avec des ID vers les 1800 et le IDENT_CURRENT me retourne des valeurs de l'ordre de 1850 il y a donc une décalage qui rend cette fonction inutilisable.
    Je suspecte un bug car le but de cette fonction est de retourner la valeur du dernier enregistrement identity et pas la valeur d'un compteur système event.
    Je crois que je vais solutionner le problème en créant moi même une fonction qui me retourne une valeur max ID pour une table donnée.

Discussions similaires

  1. [SQL 2005] Requête Compliquée
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/05/2006, 15h12
  2. Migration SQL 2005 vers 2000
    Par bsoft dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/03/2006, 16h24
  3. Connexion pages ASP avec server SQL 2005
    Par charabia dans le forum ASP
    Réponses: 10
    Dernier message: 10/02/2006, 14h02
  4. [SQL 2005] Stocker des fichiers
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/02/2006, 10h05
  5. [ADO.Net][C#/SQL 2005] Comment faire INSERT avec variable ?
    Par hduchemin dans le forum Accès aux données
    Réponses: 1
    Dernier message: 25/01/2006, 17h34

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