J'ai supprimé certains enregistrements d'une table dans une base de données SQL Server. Maintenant, les ID vont de 101 à 1200. Je veux à nouveau supprimer les enregistrements, mais je veux que les ID reviennent à 102. Existe-t-il un moyen de le faire dans SQL Server?
sql-server
auto-increment
delete-row
jumbojs
la source
la source
Réponses:
Exécutez la commande suivante pour réamorcer mytable pour commencer à 1:
Lisez à ce sujet dans la documentation en ligne (BOL, aide SQL). Veillez également à ne pas avoir d'enregistrements supérieurs à la valeur de départ que vous définissez.
la source
DBCC CHECKIDENT (mytable, RESEED, 0)
si nombre = 0 alors dans l'insertion suivante le champ d'incrémentation automatique contiendra la valeur 1
si nombre = 101, dans la prochaine insertion, le champ d'incrémentation automatique contiendra la valeur 102
Quelques informations supplémentaires ... Peut vous être utile
Avant de donner l'incrémentation automatique
number
dans la requête ci-dessus, vous devez vous assurer que la colonne d'incrémentation automatique de votre table existante contient des valeurs inférieuresnumber
.Pour obtenir la valeur maximale d'une colonne (nom_colonne) à partir d'une table (table1), vous pouvez utiliser la requête suivante
la source
semi-idiot-preuve:
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
la source
Si vous utilisez MySQL, essayez ceci:
la source
Supprimez et réamorcez toutes les tables d'une base de données.
la source
Je l'ai compris. Ses:
la source
Sur la base de la réponse acceptée, pour ceux qui ont rencontré un problème similaire, avec une qualification de schéma complète:
(
[MyDataBase].[MySchemaName].[MyTable]
) ... entraîne une erreur, vous devez être dans le contexte de cette BDAutrement dit, ce qui suit générera une erreur:
Ajoutez plutôt le nom de table complet avec des guillemets simples:
la source
Plusieurs réponses recommandent d'utiliser une déclaration comme celle-ci:
Mais l'OP a dit "supprimé certains enregistrements", qui ne sont peut-être pas tous, donc une valeur de 0 n'est pas toujours la bonne. Une autre réponse a suggéré de trouver automatiquement la valeur actuelle maximale et de réamorcer celle-ci, mais cela pose problème s'il n'y a aucun enregistrement dans la table, et donc max () renverra NULL. Un commentaire suggéré d'utiliser simplement
pour réinitialiser la valeur, mais un autre commentaire a correctement déclaré que cela ne fait qu'augmenter la valeur au maximum déjà dans le tableau; cela ne réduira pas la valeur si elle est déjà supérieure au maximum dans le tableau, ce que l'OP voulait faire.
Une meilleure solution combine ces idées. Le premier CHECKIDENT réinitialise la valeur à 0 et le second la réinitialise à la valeur la plus élevée actuellement dans la table, au cas où il y aurait des enregistrements dans la table:
Comme plusieurs commentaires l'ont indiqué, assurez-vous qu'il n'y a pas de clés étrangères dans d'autres tables pointant vers les enregistrements supprimés. Sinon, ces clés étrangères pointeront vers les enregistrements que vous créez après avoir réamorcé la table, ce qui n'est certainement pas ce que vous aviez en tête.
la source
Je veux ajouter cette réponse car l'
DBCC CHECKIDENT
approche -produira des problèmes lorsque vous utilisez des schémas pour les tables. Utilisez ceci pour être sûr:Si vous souhaitez vérifier le succès de l'opération, utilisez
qui devrait sortir
0
dans l'exemple ci-dessus.la source
Vous ne voulez pas faire cela en général. Le réensemencement peut créer des problèmes d'intégrité des données. Il n'est vraiment destiné qu'à être utilisé sur des systèmes de développement où vous supprimez toutes les données de test et recommencez. Il ne doit pas être utilisé sur un système de production au cas où tous les enregistrements associés n'auraient pas été supprimés (pas toutes les tables qui devraient être dans une relation de clé étrangère!). Vous pouvez créer un gâchis en faisant cela et surtout si vous voulez le faire régulièrement après chaque suppression. C'est une mauvaise idée de s'inquiéter des lacunes dans les valeurs de votre champ d'identité.
la source
Et ça?
Il s'agit d'un moyen rapide et simple de modifier l'incrémentation automatique sur 0 ou sur le nombre souhaité. J'ai compris cela en exportant une base de données et en lisant le code moi-même.
Vous pouvez également l'écrire comme ceci pour en faire une solution monoligne:
la source