Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Identity (autonumber) é incrementado mesmo com uma reversão de transação


Se você pensar bem, o número de incremento automático não deveria ser transacional. Se outras transações tivessem que esperar para ver se o número automático seria usado ou "revertido", elas seriam bloqueadas pela transação existente usando o número automático. Por exemplo, considere meu pseudocódigo abaixo com a tabela A usando um campo de numeração automática para a coluna 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

Se a transação do usuário 2 começar um milissegundo após a do usuário 1, sua inserção na tabela A teria que esperar que toda a transação do usuário 1 fosse concluída apenas para ver se a numeração automática da primeira inserção em A foi usada.

Este é um recurso, não um bug. Eu recomendaria usar outro esquema para gerar números automáticos se você precisar que eles sejam bem sequenciais.