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

¿Cómo genera SQL Server valores en una columna de identidad?

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 .