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
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
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 !
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
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.
Je ne comprend pas.Existe-t-il un moyen pour que SQL Server prenne les IDs vides?
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![]()
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
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.
En quoi cela est-il un problème ?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).
Il vous faut dans ce cas :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??
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
@++![]()
en effet, c'est pas du tout un problème, avec 2 147 483 647 ça suffit
![]()
Partager