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

Como o SQL Server gera valores em uma coluna de identidade?


Você está cometendo a falácia comum de assumir uma ordem na tabela. As mesas não têm ordem. Apenas os resultados têm ordem, que é indeterminada, a menos que um ORDER BY explícito seja especificado.

Você pode fazer uma pergunta diferente:como o valor gerado pela identidade é atribuído no caso de inserções simultâneas? A resposta é simples:não importa . E se você fizer qualquer suposição sobre o pedido, seu código está quebrado. O mesmo vale para as lacunas. Seu aplicativo deve funcionar mesmo que as identidades geradas sejam completamente aleatórias, e o aplicativo escrito corretamente será funcionará se a identidade for completamente aleatória. Use SCOPE_IDENTITY() para recuperar a última identidade inserida. Melhor ainda, use o OUTPUT cláusula de INSERT , também funciona para inserções de várias linhas.

Para registro:as identidades são geradas na ordem em que as operações adquirem acesso ao stream de log .