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

¿SQL Server garantiza la inserción secuencial de una columna de identidad?

Garantizado como absolutamente bajo ninguna circunstancia, ¿podría obtener un valor que podría ser menor o igual que el valor máximo actual? No, no existe tal garantía. Dicho esto, las circunstancias bajo las cuales podría ocurrir ese escenario son limitadas:

  1. Alguien deshabilita la inserción de identidad e inserta un valor.
  2. Alguien reinicia la columna de identidad.
  3. Alguien cambia el signo del valor de incremento (es decir, en lugar de +1 se cambia a -1)

Suponiendo que no se dé ninguna de estas circunstancias, está a salvo de las condiciones de carrera que crean una situación en la que el siguiente valor es más bajo que un valor existente. Dicho esto, no hay garantía de que las filas se confirmen en el orden de sus valores de identidad. Por ejemplo:

  1. Abra una transacción, insértela en su tabla con una columna de identidad. Digamos que obtiene el valor 42.
  2. Insertar y confirmar en la misma tabla otro valor. Digamos que obtiene el valor 43.

Hasta que se confirma la primera transacción, 43 existe pero 42 no. La columna de identidad simplemente reserva un valor, no dicta el orden de las confirmaciones.