6
votes

La nouvelle fonctionnalité de saut d'identité de Microsoft SQL Server 2012 gère la gamme de types de données?

Je pensais que c'était un bug mais après avoir lu cet article http://www.codeproject.com/tips/668042/sql-server-2012-auto-identity-column-value-jump-is , j'ai trouvé que c'est une nouvelle fonctionnalité de SQL Server 2012.

Cette fonction incrémente votre dernière valeur de colonne d'identité de 1000 (INTS) pour les nouvelles lignes (10000 pour BigintS) automatiquement.

 Entrez la description de l'image ici

J'essaie toujours la solution donnée dans l'article mais je n'ai aucun problème si ce saut se produit au client. Parce que je montrais une version hachée d'IDS au client. C'est sa propre demande et non la mienne.

Mais je me demande si les valeurs de ces colonnes d'identité deviennent plus que la plage de type de données (int ou Bigint)? Comment il gère la plage et la taille de la colonne?


1 commentaires

La solution dans l'article est très simple et prend 5 min. J'ai appliqué la solution -t272 et ça marche bien.


3 Réponses :


4
votes

Les colonnes d'identité existantes échouent avec "serveur: MSG 8115, niveau 16, état 1, ligne 2 Erreur de débordement arithmétique convertissant l'identité au type de données INT. Le débordement arithmétique s'est produit." Voir http://www.sql-server-performance.com/2006 / Identity-Integer-Scope / pour la discussion.

Il n'y a pas de raison de suspecter que le saut d'identité aura un comportement différent. Je ne voudrais pas que cela chasse des identités inutilisées dans une séquence antérieure.


1 commentaires

Merci ce lien et Stackoverflow.com/questions/13132939/... efface la confusion.L'au que c'est une question mysql mais cela fait un point.Si j'apprécie progressivement les valeurs À partir de zéro, il faudra 300 millions d'années et 67 108 863 téraoctets d'espace libre. Parce que le max Bigint est le 9223372036854775807.AT 1000 inserts / seconde 106751991167 jours de valeur de 300 millions d'années comme expliqué par @ craigringer.Le seul problème est lorsque vous insérez la limite maximale. Mais votre article a indiqué que votre article a annoncé l'erreur.



2
votes

Pourquoi n'utilisez-vous pas une séquence dans MS Server 2012.

Un exemple de code de séquence sera comme suit et que vous n'avez pas besoin d'autorisation d'administrateur pour créer une séquence. P>

RIGHT ('0000' + CAST (NEXT VALUE FOR SerialNumber AS VARCHAR(5)), 4) AS SerialNumber 


0 commentaires

-7
votes

Le problème a été corrigé dans la dernière version des mises à jour SQL Server. C'était un bug.

Si vous souhaitez toujours utiliser la même version, vous devrez vérifier votre identité à des intervalles et la réenverse avec l'identité actuelle s'ils avaient sauté plus de 1000 ans.

Ce script peut vous aider à connaître les valeurs de graines, les valeurs d'incrément et la valeur de colonne d'identité actuelle. http://blog.sqlauthority.com/2014/08/29/sql-server-query-a--- Trouver-graine-valeurs-incrément-valeurs-valeurs-et-courant-colonne-colonne-de-lame-de-table-with-max-valeur-de-datatype-part-2 /

Ma suggestion: Appliquez des correctifs de resent, Cu ou Service Pack.


2 commentaires

Pouvez-vous créer un lien vers n'importe quelle documentation sur ce correctif? Je ne vois aucune mises à jour récentes de l'élément Connect ici Connect.Microsoft.com/sqlserver/feedback/Détails/739013/... Bien qu'il dise que le problème avec l'arrêt du gestionnaire de contrôle sera résolu à un moment donné.


Quel problème a été corrigé exactement, je ne comprends pas.