La colonne d'identité semble ignorer les valeurs

J'ai créé une table dans sqlserver 2012 avec un ID de key primaire avec l'identité activée, et j'ai trouvé que les valeurs qu'elle insérait passaient de 1 à 55, puis sautaient à 1056.

Pour être clair, les ID returnnés étaient les suivants:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 1056

Quelles sont les causes de cela?

Généralement, c'est un signe que vous avez accidentellement créé un groupe de lignes puis supprimé les. Je l'ai eu par le biais de loops mal conçues avant, ou même juste une mauvaise logique d'application. Dans tous les cas, cela est dû à la suppression d'loggings de la table. Cela peut aussi être causé par une modification manuelle de la graine d'identité, mais à less que vous n'essayiez intentionnellement de le faire, il est assez improbable que cela se produise. Particulièrement si vous travaillez avec une équipe qui a access à la database, il est tout à fait concevable que quelqu'un d'autre ait commis une erreur mineure qui a gaspillé quelques valeurs. Je suis sûr que ça ne vaut pas la peine de s'inquiéter.

Un assembly en ligne rapide: je vois que vous avez trouvé une reference à un "bug" qui fait exactement la même chose. Je n'étais pas au courant de cela, mais cela l'explique certainement. Mes points sont toujours valables. Ce n'est vraiment pas la peine de s'inquiéter dans la majorité des cas.

Tout cela dit, vous pouvez réinitialiser la colonne d'identité, et une search vous dira certainement comment faire cela. Vous pouvez également simplement laisser tomber la colonne et l'append à nouveau. Mais normalement, je l'ignore quand ce genre de chose arrive. Ce millier ne fera pas vraiment de différence si vous allez toucher 2 ^ 31 loggings de toute façon, et tout programme bien écrit n'aura pas besoin que les ID soient dans un format particulier ou dans une ressortingction particulière pour fonctionner.