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 .