Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 12359|Répondre: 1

[Source] Colonnes à croissance automatique de SQL Server 2012 avec problèmes de saut de valeur

[Copié le lien]
Publié sur 23/08/2018 12:03:06 | | | |
Introduction

À partir des versions SQL Server 2012, lorsque l’instance SQL Server est redémarrée, la valeur de la colonne de croissance automatique de la table saute et la valeur spécifique est déterminée par le type de données de la colonne de croissance. Si le type de données est int, la valeur de saut est 1000, et si le type de données est bigint, la valeur de saut est 10000. Dans notre projet, ce type de problème de saut est inacceptable, surtout lorsqu’il est présenté du côté client. Ce problème étrange n’est présent que dans SQL Server 2012 et ultérieurs, et il n’existe pas dans les versions antérieures à SQL Server 2012.


arrière-plan

Il y a quelques jours, un collègue de notre équipe QA a suggéré : La valeur de la colonne auto-augmentante de notre tableau a inexplicablement grimpé de 10 000. En d’autres termes, la dernière valeur de la colonne auto-incrémentaire de notre tableau était 2200, mais maintenant que nous avons ajouté un nouvel enregistrement, la valeur de la colonne auto-incrémentée est devenue 12200. Dans notre logique métier, ce genre de situation n’est pas autorisée pour le client, donc il faut résoudre ce problème.


Utilisation du code

Au début, nous étions tous très étranges, comment cela a-t-il pu arriver ? Nous n’insérons généralement aucune valeur manuellement dans des colonnes auto-incrémentantes (insérer manuellement des valeurs dans des colonnes auto-gonflantes est acceptable), et les valeurs des colonnes auto-gonflantes sont maintenues par la base de données elle-même. Un membre de notre équipe principale a commencé à rechercher cette question et a trouvé la réponse. Maintenant, j’aimerais expliquer ce problème en détail ainsi que la solution que mon collègue a trouvée.


Comment reproduire ce bug


Vous devrez installer SQL Server 2012 puis créer une base de données de test. Puis créez un tableau avec des colonnes auto-croissantes :
Insérez maintenant deux données :

Examinez les résultats :






À ce stade, le résultat était le même que prévu. Maintenant, redémarrez votre service SQL Server. Il existe plusieurs façons de redémarrer SQL Service, et ici nous utilisons le gestionnaire SQL Server pour le redémarrer :



Après redémarrage, nous insérons 2 autres données dans la table à l’instant :



Examinez les résultats :




Vous voyez maintenant les résultats après avoir redémarré SQL Server 2012, et ses valeurs de colonnes auto-incrémentaires commencent à 1002. C’est-à-dire, j’ai sauté de 1000. Comme mentionné précédemment, si le type de données que nous ajoutons est bigint, sa valeur de saut sera de 10 000.


Est-ce vraiment un BUG ?

Microsoft affirme qu’il s’agit d’une fonctionnalité, pas d’un bug, et que c’est utile dans de nombreux cas. Mais dans notre cas, nous n’avons pas besoin d’une telle fonction, car ces données auto-incrémentales sont destinées à être montrées aux clients, et les clients se sentiront étrangement s’ils voient de telles données en bondissant. Et la valeur de saut est déterminée par le nombre de fois que vous redémarrez SQL Server. Si ces données ne sont pas montrées aux clients, elles peuvent être acceptables. Par conséquent, cette fonctionnalité est généralement réservée à un usage interne.



solution

Si cette « fonctionnalité » offerte par Microsoft ne nous intéresse pas, il y a deux façons de la désactiver.

1. Utilisation des séquences

2. Enregistrer le paramètre de démarrage -t272 pour SQL Server



Utilisation des séquences

D’abord, il faut supprimer les colonnes auto-incrémentaires du tableau. Puis créer une séquence sans mise en cache, à partir de laquelle les valeurs numériques sont insérées. Voici le code exemple :


Enregistrer le paramètre de démarrage -t272

Ouvre SQL Server Configuration Manager. Sélectionnez votre instance SQL Server 2012, faites un clic droit, puis sélectionnez le menu Propriétés. Trouvez les paramètres de lancement dans la fenêtre pop-up et enregistrez -t272. Après l’achèvement, redémarrez SQL Server (SQLSERVER2012) dans la figure ci-dessous, puis effectuez l’opération de reproduction de bugs pour vérifier si le problème a été résolu.




Notes supplémentaires :

Si vous avez beaucoup de tableaux auto-gonflables dans votre base de données et qu’ils ont tous des problèmes de sauts numériques, il vaut mieux utiliser la seconde option. Parce que c’est très simple et que l’ampleur est au niveau serveur. L’adoption de la seconde solution affectera toutes les bases de données de cette instance de service.





Précédent:Le serveur web renvoie le type de code d’état et la signification
Prochain:Mettre à jour la méthode de fonctionnement de la colonne ID auto-croissante dans la base de données SQL Server
 Propriétaire| Publié sur 08/07/2020 15:15:52 |
SQL Server fonctionne dans les versions supérieures. Il « met en cache » 1000 valeurs d’identification au départ pour des raisons de performance
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com