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

L'identité SQL (numérotation automatique) est incrémentée même avec une annulation de transaction

Si vous y réfléchissez, le nombre d'incrémentation automatique ne devrait pas être transactionnel. Si d'autres transactions devaient attendre pour voir si la numérotation automatique allait être utilisée ou "annulée", elles seraient bloquées par la transaction existante utilisant la numérotation automatique. Par exemple, considérez mon pseudo-code ci-dessous avec la table A en utilisant un champ de numérotation automatique pour la colonne ID :

User 1
------------
begin transaction
insert into A ...
insert into B ...
update C ...
insert into D ...
commit


User 2
-----------
begin transaction
insert into A ...
insert into B ...
commit

Si la transaction de l'utilisateur 2 démarre une milliseconde après celle de l'utilisateur 1, son insertion dans la table A devra attendre que la transaction entière de l'utilisateur 1 se termine juste pour voir si la numérotation automatique de la première insertion dans A a été utilisée.

Il s'agit d'une fonctionnalité, pas d'un bug. Je recommanderais d'utiliser un autre schéma pour générer des numéros automatiques si vous avez besoin qu'ils soient étroitement séquentiels.