spécification d'identité de server sql non séquentielle

J'ai remarqué que SQL Sever (2008 express) saute randomment lorsqu'il insère des spécifications d'identité auto-incrémentées.

Par exemple une de mes colonnes "HitStat_ID" va insert séquentiellement 15, 16, 17, 18, puis tout d'un coup, il va décider de sauter à, disons 1012, 1013, 1014 …. puis 9120, 9121 etc.

Cela n'a pas vraiment d'importance, tant qu'ils sont uniques (ce qu'ils sont) mais pourquoi le feraient-ils? Le fait de le faire dans plus d'une table aussi … La chose étrange est que cela n'a été fait au cours de la dernière semaine, mais l'application a été en développement pendant des mois!

ETA: Je travaille dans ASP.NET VB Voici l'insert (dans ce cas):

sql = "INSERT INTO [HitStats] ([PageName], [Date_and_Time], [User_ID]) values ('Home', '" + TheDateTime + "', '" + Session("User_ID") + "')" Dim dbcmd As SqlCommand = New SqlCommand(sql, dbconn) dbcmd.ExecuteNonQuery() dbcmd.Dispose() 

S'il vous plaît ne continuez pas sur l'injection de sql bla bla, son ne va pas se produire!

Si vous utilisez une application et des transactions, lorsque vous annulez une transaction, vous perdrez ce numéro d'incrémentation automatique généré. Aussi, si vous faites des insertions et les annulez.

Voir plus ici

En outre, si vous supprimez des données, vous ne recevrez plus les nombres générés, sauf si vous effectuez un reseed. Voir ici

De tels écarts ne seraient pas rares si la database était en cours de réplication et si la gestion automatique des plages d'identité était utilisée.

Ce qui se passe, c'est que les blocs de valeurs d'identité sont remis à chaque server impliqué dans la réplication, afin qu'ils puissent dissortingbuer des valeurs d'identité sans avoir à communiquer avec les autres servers. Une fois qu'un bloc a été utilisé sur un server, il "sautera" au bloc suivant qui lui a été atsortingbué, ce qui correspondra probablement à une plage de valeurs beaucoup plus élevée.

+1 sur @ElVieejo concernant les "insertions échouées". Une autre possibilité est que quelqu'un ou quelque chose ajoute des valeurs spécifiques ( SET IDENTITY_INSERT ON ) – cela peut expliquer les grandes lacunes.