No hay una manera fácil de hacerlo, especialmente si insistes en el siguiente valor disponible (= no hay espacios). Debe usar el valor de incremento automático y hará que su aplicación funcione mucho mejor.
¿Cuál es el problema?
- que necesita para obtener un valor de la base de datos de
- Es necesario asignar a su entidad
- Es necesario para salvar la entidad a la base de datos
parece fácil, no es ¿eso? No, no lo es si tiene un entorno concurrente donde más de un subproceso puede hacer el paso 1. al mismo tiempo antes de que otros subprocesos lleguen al paso 3. = todos los subprocesos insertan el registro con el mismo valor.
¿Cómo manejarlo? Una forma es usar una tabla separada con valor máximo y operación atómica para obtener e incrementar el valor. Creo procedimiento almacenado hacer algo como esto debe ser atómica:
DECLARE @Result INT
UPDATE SequenceTable SET @Result = MaxValue = MaxValue + 1 WHERE SequnceName = '...'
RETURN @Result
La llamada al procedimiento almacenado debe estar fuera de cualquier transacción para hacer el mejor rendimiento.
Esto debería permitirle generar números únicos pero sin secuencia sin espacios. Si toma el valor con dicha operación y no usará ese valor, se perderá y su secuencia contendrá la brecha.
Si no desea la separación, debe poner la operación del procedimiento almacenado y la operación en la transacción para que la tabla de registro en secuencia se bloquee hasta que se confirmen los datos.
Gracias que funcionó. – Jonnster