sql >> Base de Datos >  >> RDS >> Sqlserver

La identidad SQL (autonumeración) se incrementa incluso con una reversión de transacción

Si lo piensa, el número de incremento automático no debería ser transaccional. Si otras transacciones tuvieran que esperar para ver si la numeración automática se iba a usar o "revertir", serían bloqueadas por la transacción existente que usa la numeración automática. Por ejemplo, considere mi código psuedo a continuación con la tabla A usando un campo de numeración automática para la columna 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 transacción del usuario 2 comienza un milisegundo después de la del usuario 1, su inserción en la tabla A tendría que esperar a que se complete la transacción completa del usuario 1 solo para ver si se utilizó la numeración automática de la primera inserción en A.

Esto es una característica, no un error. Recomendaría usar otro esquema para generar números automáticos si necesita que sean estrictamente secuenciales.