En otras palabras, es el enfoque siguiente "cursoring" garantizado para trabajar:¿SQL Server garantiza la inserción secuencial de una columna de identidad?
- recuperar filas de DB
- guardar el más grande Identificación de los registros devueltos para más adelante, por ejemplo, en
LastMax
- después,
"SELECT * FROM MyTable WHERE Id > {0}", LastMax
Para que eso funcione, tengo que estar seguros de que cada fila no he tenido en el paso 1 tiene un identificador mayor que LastMax
. ¿Esto está garantizado, o puedo encontrarme en condiciones de carrera raras?
1 la segunda parte es exactamente mi pregunta - y por tanto su respuesta es un "no", porque si lo hago mi primera recuperación de entre el veces cuando 43 se cometen y 42 se comprometen, nunca sabré sobre la fila 42 – balpha
@balpha - Correcto. La columna de identidad simplemente reserva valores que se incrementan automáticamente. No proporciona ninguna garantía en cuanto a la secuencia de valores o la secuencia de confirmaciones. Es * probablemente * el caso de que los valores se hayan comprometido en el orden de sus valores de identidad, pero eso es muy diferente de decir que están * garantizados * en ese orden. – Thomas
+1 La posibilidad de transacción es absolutamente correcta, y simplemente no consideré * dos * otras transacciones, la segunda se cometió primero. Estoy borrando mi respuesta. ¡La buena noticia es que finalmente obtengo mi insignia disciplinada! ¡Hurra! –