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 :

RAZ des auto_increment


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 4
    Par défaut RAZ des auto_increment
    Bonjour,

    Comment fais t-on sous MS SQL Server pour réinitialiser la valeur d'un champ auto-incrémenté ?
    Sous mysql on RAZ la table et les valeurs repartent à 1 mais pas sous SQL Server !

    Qqun a t-il la solution ?

    Merci

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 4
    Par défaut
    Bon je me réponds à moi-même puisque après quelques recherches sur le web j'ai trouvé la solution :
    1°) une solution consiste à supprimer les tables et à les recréer mais bon c'est un peu 'bourrin' comme méthode.
    2°) Sinon une autre solution existe plus élégante :
    il faut utiliser l'instruction DBC CHECKIDENT(nomtable,RESEED,0) après avoir vidé la table des enregistrements inutiles.

    Voili voila !

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 156
    Par défaut
    bonjour,

    la deuxième solution fait un reset, mais il paraît qu'on n'est pas à l'abri d'une erreur si l'ID auto va remplacer un ID existant.

    Existe-t-il un moyen pour que SQL Server prenne les IDs vides?

    Par exemple
    ID
    1
    2
    4
    5
    8

    Nouvel ID auto 1 = 3
    Nouvel ID auto 2 = 6
    Nouvel ID auto 3 = 7

    etc.

    Merci d'avance

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    L'instruction TRUNCATE TABLE remet également la valeur du compteur à 0.
    En revanche cette instruction supprime toutes les lignes de la table, et il n'est pas possible de l'exécuter si la clé primaire de la table est référencée par d'autres tables.

    Existe-t-il un moyen pour que SQL Server prenne les IDs vides?
    Je ne comprend pas.
    Si vous voulez spécifier une valeur pour la colonne ayant la propriété de compteur auto-incrémenté, il vous faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET IDENTITY_INSERT maTable ON
    -- instructions ... (INSERT (listeDesColonnes) VALUES / SELECT ...)
    SET IDENTITY_INSERT maTable OFF
    @++

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 156
    Par défaut
    c'est pas vraiment ce que je souhaite

    Il s'agit plutôt d'une incrémentation automatique et intelligente de l'ID.

    En effet, après des milliers d'inserts, on a des valeurs allant de 2359 à 25321 avec des écarts possible de milliers de valeurs entre les valeurs (dûs aux deletes).

    En gros, ça fait quoi si on arrive à terme de la limite des int?
    Existe-t-il une méthode d'auto incrément intelligente pour trouver les valeurs minimales, au lieu d'incrémenter toujours la même valeur??

    Merci d'avance

  6. #6
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    La limite des INT est de 2 147 483 647. Ca fait un sacre paquet de lignes...
    Que la valeur de celui-ci soit 1 ou 25885255, il prend la meme place.

    Si vous craignez depasser ce nombre, utilisez des bigint. Ils font 8octets au lieu de 4 pour les ints et la valeur max est de 9 223 372 036 854 775 807.

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    En effet, après des milliers d'inserts, on a des valeurs allant de 2359 à 25321 avec des écarts possible de milliers de valeurs entre les valeurs (dûs aux deletes).
    En quoi cela est-il un problème ?

    Existe-t-il une méthode d'auto incrément intelligente pour trouver les valeurs minimales, au lieu d'incrémenter toujours la même valeur??
    Il vous faut dans ce cas :

    1) abandonner les compteurs auto-incrémentés
    2) utiliser une table de compteurs, avec le nom de la table et la valeur courante du compteur
    3) vous amuser, sous le niveau d'isolation SERIALIZABLE, à collecter la valeur du compteur
    4) vous amuser, sous le même niveau d'isolation, à l'incrémenter ...

    Tout cela parce qu'avoir des "trous" dans vos valeurs de clé primaire vous pose un problème ... qui n'en est pas un !

    Si vous avez peur de dépasser, voyez ce qu'à écrit Pti_Dje

    @++

  8. #8
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 156
    Par défaut
    en effet, c'est pas du tout un problème, avec 2 147 483 647 ça suffit

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

Discussions similaires

  1. RAZ des variables
    Par noir_desir dans le forum Scilab
    Réponses: 2
    Dernier message: 06/02/2014, 13h54
  2. l'auto_increment saute des valeurs ?
    Par eprevot dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/05/2013, 16h55
  3. Traitement des auto_incréments sur un insert en masse
    Par sergeh dans le forum Requêtes
    Réponses: 6
    Dernier message: 09/10/2012, 15h35
  4. Réorganiser des auto_increment
    Par Franck0 dans le forum Requêtes
    Réponses: 9
    Dernier message: 23/08/2012, 14h01
  5. RAZ des valeurs de propriétes d'un control
    Par amine008 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 15/08/2011, 13h17

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