Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server garantit-il l'insertion séquentielle d'une colonne d'identité ?

Garanti car en aucun cas vous ne pourriez obtenir une valeur inférieure ou égale à la valeur maximale actuelle ? Non, il n'y a pas une telle garantie. Cela dit, les circonstances dans lesquelles ce scénario pourrait se produire sont limitées :

  1. Quelqu'un désactive l'insertion d'identité et insère une valeur.
  2. Quelqu'un réamorce la colonne d'identité.
  3. Quelqu'un change le signe de la valeur d'incrément (c'est-à-dire qu'au lieu de +1, il est remplacé par -1)

En supposant aucune de ces circonstances, vous êtes à l'abri des conditions de concurrence créant une situation où la valeur suivante est inférieure à une valeur existante. Cela dit, il n'y a aucune garantie que les lignes seront validées dans l'ordre de leurs valeurs identitaires. Par exemple :

  1. Ouvrez une transaction, insérez-la dans votre table avec une colonne d'identité. Disons qu'il obtient la valeur 42.
  2. Insérez et validez dans la même table une autre valeur. Disons qu'il obtient la valeur 43.

Jusqu'à ce que la première transaction soit validée, 43 existe mais 42 n'existe pas. La colonne d'identité réserve simplement une valeur, elle ne dicte pas l'ordre des commits.