J'utilise le serveur SQL 2012 (Denali). Je me demande pourquoi toutes les valeurs de colonne d'identité commencent à 1001 et ainsi de suite. Au début, la colonne Identity
commence à partir de 1,2 et ainsi de suite et ajoute une identité en douceur, mais soudain, elle passe à 1001 1002 et plus pour toute la table de la base de données contenant la colonne d'identité. Quelle pourrait être la raison? Veuillez aider.
Microsoft a changé la façon dont ils traitent les valeurs d'identité dans SQL Server 2012 et, par conséquent, vous pouvez voir les écarts d'identité entre vos enregistrements après le redémarrage de votre instance de serveur SQL ou de votre machine serveur. Il peut y avoir d'autres raisons à ces écarts d'ID, cela peut être dû au redémarrage automatique du serveur après l'installation d'une mise à jour.
Vous pouvez utiliser ci-dessous deux choix
Utiliser un générateur de séquence avec le paramètre NO CACHE
Définition de l'indicateur de trace 272 sur SQL Server 2012 que vous attendez ici
Ouvrez "SQL Server Configuration Manager"
Je pense que vous avez l'explication dans un commentaire sur cet élément de connexion. Le basculement ou le redémarrage entraîne un rétablissement de l'identité
Pour augmenter les performances des machines haut de gamme, nous introduisons une préallocation pour la valeur d'identité en 2012. Et cette fonctionnalité peut être désactivée en utilisant TF 272 (vous obtiendrez alors le comportement de 2008R2).
Les propriétés d'identité sont stockées séparément dans des métadonnées. Si une valeur est utilisée dans l'identité et que l'incrément est appelé, la nouvelle valeur de départ sera définie. Aucune opération, y compris Rollback, Failover, ..... ne peut modifier la valeur de départ sauf le réamorçage DBCC. Le basculement s'applique à l'objet table, mais pas à l'objet identité. Ainsi, pour le basculement, vous pouvez appeler le point de contrôle avant le basculement manuel, mais vous pouvez voir un écart pour les cas non planifiés. Si l'écart est un problème, je vous suggère d'utiliser TF 272.
Pour l'arrêt du gestionnaire de contrôle, nous avons un correctif pour la prochaine version (avec un autre TF). Cette correction prendra en charge la plupart des cas d'arrêt du gestionnaire de contrôle.
Je suppose que vous pouvez utiliser la séquence à la place, la séquence vous donne un contrôle complet à 100% et est à bien des égards bien supérieure à l'identité ... L'identité est tellement facile et pratique
http://msdn.Microsoft.com/en-us/library/ff878091.aspx
Pour autant que je sache, lorsque vous effectuez une insertion avec identité et échoue, l'identité est utilisée de toute façon, Vérifié
avec la séquence, vous pouvez le faire "combler" les lacunes en utilisant le cycle. Bien que, comme le souligne Amy Barrett, cela est créé hors de la portée de la transaction.
Il existe une optimisation des performances lorsque vous utilisez un cache qui peut également être utile.