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 :

Modifier le compteur de la clé primaire d'une table [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 140
    Par défaut Modifier le compteur de la clé primaire d'une table
    Bonjour,
    Pour une raison que j'ignore la clé primaire des enregistrements d'une table est passée d'un coup de 14 à 22, seul aléa que j'ai pu identifier c'est une coupure d'Internet au moment où j'enregistrais une ligne à distance, à la limite je comprendrais qu'on saute de 14 à 16 mais de là à arriver à 22 ...
    Bref, je souhaiterais pouvoir modifier la clé primaire 22 pour la ramener à 15 et faire redémarrer le compteur pour que le prochain enregistrement soit 16. Quelqu'un pourrait-il m'aider ?
    Pour votre info, je suis assez profane en matière de SQL
    Merci

  2. #2
    Membre chevronné Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 552
    Par défaut
    S'il y a eu réservation de valeurs sans que la transaction se conclue, c'est sûr que le compteur peut sauter des valeurs.
    La question fondamentale est, est-ce que c'est un RÉEL problème d'avoir des trous dans la PK ?
    Si non, on passe à un autre appel
    Si la réponse est oui alors il faut changer de stratégie.

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 140
    Par défaut
    Non ce n'est pas un réel problème, c'est juste cosmétique mais j'aime les choses propres

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 660
    Billets dans le blog
    10
    Par défaut
    Ce genre de cosmétique qu'il ne faut pas faire, c'est du travail inutile et récurrent, le phénomène pouvant se reproduire à tout moment.
    Les "trous" de numérotation peuvent être liés a des lignes non commitées (rollback explicite ou pas) ou des lignes supprimées, voire, c'est plus rare, à un forçage volontaire d'une "plage de trous" ayant pour vocation d'accueillir des lignes issues d'un système externe dont on connait le nombre.

    Par ailleurs, il faut également savoir que les valeurs de ces types d'identifiants ne sont pas toujours chronologiques, dans un environnement multithread il arrive que le chrono 100 soit inséré avant le chrono 99.

    À partir de là, la cosmétique il faut oublier, ce n'est absolument pas la vocation de ce type d'attributs.

    Pire encore, les "identity" étant le plus souvent des clefs primaires, les renuméroter dans la table dont ils sont issus aurait par effet cascade un impact sur toutes les tables où cette même colonne est clef étrangère. On tire donc sur une toute petite ficelle mais on peut ramener toute la pelote et renuméroter des millions ou des milliards de lignes.

    Bref une très, mais alors très très mauvaise idée.

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 140
    Par défaut
    Tout ça je le sais bien, notamment la clé primaire d'une table servant de lien avec un enregistrement d'une autre table.
    Dans le cas présent, il s'agit d'un nouveau projet avec des essais donc les conséquences sont limitées. Il serait plus facile de suivre la chronologie des choses si la numérotation était respectée. Dans un projet abouti avec des millions de lignes évidemment que les sauts passeraient inaperçus.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    1) TRUNCATE TABLE réinitialise à l'origine la graine de l'IDENTITY
    2) DBCC CHECKIDENT permet de redéfinir la graine à une valeur quelconque.

    A me lire : https://blog.developpez.com/sqlpro/p...vec_sql_server

    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/ * * * * *

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 140
    Par défaut
    Merci ! C'est exactement ce que je voulais

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 660
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Feliperennes Voir le message
    Il serait plus facile de suivre la chronologie des choses si la numérotation était respectée.
    Encore une fois non !
    La chronologie ne doit JAMAIS être déduite des valeurs d'une colonne de type identity.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/09/2005, 23h06
  2. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 22h06
  3. Comment avoir 2 clés primaires dans une table
    Par Guigui_ dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/01/2005, 09h29
  4. [Bdd ]Trouver la clé primaire d'une table
    Par drosof dans le forum JDBC
    Réponses: 3
    Dernier message: 11/08/2004, 11h58
  5. 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, 14h00

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