Está cometiendo la falacia común de asumir un orden en la tabla. Las mesas no tienen orden. Solo los resultados tienen un orden, que es indeterminado a menos que se especifique ORDER BY explícito.
Puede hacer una pregunta diferente:¿cómo se asigna el valor generado por la identidad en el caso de inserciones simultáneas? La respuesta es simple:no importa . Y si hace alguna suposición sobre el orden, entonces su código está roto. Lo mismo ocurre con las lagunas. Su aplicación debería funcionar incluso si las identidades generadas son completamente aleatorias, y la aplicación correctamente escrita lo hará funciona si la identidad es completamente aleatoria. Use SCOPE_IDENTITY()
para recuperar la última identidad insertada. Mejor aún, use el OUTPUT
cláusula de INSERT
, también funciona para inserciones de varias filas.
Para que conste:las identidades se generan en el orden en que las operaciones adquieren acceso al flujo de registro .