8
votes

Maximum pour l'incrément automatique Int clé primaire dans SQL Server

Y a-t-il un maximum? SQL Server commencera-t-il à lancer des mesures SQLExceptions lorsque le maximum est atteint? Comment le résolvez-vous? (Archivage?)

à partir des ressources SQL Server, je peux voir que le maximum est de 2 147 483 647. Je suis loin de ça, mais j'étais juste curieux.


0 commentaires

5 Réponses :


10
votes

Le maximum pour un int code> est en effet 2 147 483 647.

Si vous essayez de passer au-delà de la taille maximale, vous recevrez cette erreur: p>

Msg 8115, Level 16, State 1, Line 2 
Arithmetic overflow error converting IDENTITY to data type int. 
Arithmetic overflow occurred.


0 commentaires

5
votes

Le maximum est défini par le type de données, non par le modificateur Identity . Pour une colonne int , vous avez déjà compris le maximum. Si vous avez besoin d'un type de données avec une gamme plus grande, Bigint est le choix évident, et il peut très bien être marqué identité . .

  • tinyint : 0 à 255
  • smallint : -32768 à 32767
  • int : -2147483648 à 2147483647
  • Bigint : -9223372036854775808 à 9223372036854775807

    Je m'attendrais à ce que l'erreur soit soulevée lors de la tentative d'insérer des lignes après avoir frappé le maximum, car la mise en œuvre identité essaierait toujours d'incrémenter avec chaque insert.

    Bien qu'il soit certainement possible d'archiver des lignes d'un autre magasin de données et de démarrer des identifiants de réutilisation ( DBCC Checkident (travaux, 0) réinitialisera le comptoir), ce n'est pas quelque chose que SQL Le serveur offre une boîte hors tension. Vous devrez mettre en œuvre la logique pour cela vous-même et vous devrez davantage de déterminer quel type de problèmes de réutilisation de problèmes pourrait apporter à votre demande. Pour une application Web, par exemple, d'anciennes URL indiquent soudainement de nouveaux documents ou de retourner 404 erreurs?


0 commentaires

6
votes

Vous pouvez voir l'erreur en utilisant ce petit exemple xxx

l'erreur: xxx


0 commentaires

1
votes

Notez que si vous tronquez la table, vous réinitialisez essentiellement l'ID. Peut être utile dans les cas où vous ne pouvez pas laisser tomber et recréer la table.


1 commentaires

Cette réponse serait améliorée par un lien vers une source de documentation.



1
votes

Si vous insistez sur l'utilisation par exemple Int Type de données pour votre clé principale et que vous avez atteint la fin de la capacité de ce type de données, vous devez procéder comme suit:

  1. Supprimer des données plus anciennes. Par exemple, supprimer du nom de Tableau où PK <1000000 Bien sûr, si vos données sont importantes, avant de supprimer, vous devez les déplacer dans une table d'archives. De cette façon, la gamme de 1 à 1000000 deviendra libre et vous pouvez l'utiliser. Supposons que votre clé principale soit insérée de manière dynamique. De cette façon, vous devez réexécutez votre clé primaire.
  2. Exécutez cette requête sur votre table:

    DBCC Contempter (nom de table, réseaux, 0)

    De cette façon, votre enregistrement sera inséré par la clé primaire de 1.

    Mais considérez que si votre PK atteint à 100 0001, vous rencontrerez une erreur car cette clé primaire existe dans votre table. En d'autres termes, vous devez toujours considérer votre clé primaire.


0 commentaires