Ver Mensaje Individual
  #3  
Antiguo 23-02-2022
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Reputación: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Primero, esos rollback que tienes infiltrados muy sospechosos. Eso es definitivamente un error. Lo normal es que una transaccion encapsula las internas, en vez de retroceder en CADA intento.

Segundo, lo que describes es fácil de explicar:
  • Maquina 1 @ 10pm => SELECT...
  • Maquina 2 @ 10::01pm => INSERT...

La BD esta andando correcto, y este es tu algoritmo. No hay como decir que el "código" que usas es el ULTIMO código entre TODOS los participantes. Lo que tienes es "el ultimo código en ESTE INSTANTE".

Es distinto!

La forma correcta es que al MOMENTO de solicitar el código te "adueñas de el" y le avanzas el contador. Maso así:

Cita:
Tabla Codigos:
Id:...
Codigo: Int <- El siguiente
Código SQL [-]
UPDATE Codigos SET Codigo = Codigo + 1
OUTPUT INSERTED. Codigo
WHERE Id = @Id


La diferencia:

Tu algoritmo
Código:
max([1, 2, 3])
Lo que quieres
Código:
Actual = 1

Maquina1 = 
   Capturar 1
   Actual = 2

Maquina2 = 
   Capturar 2
   Actual = 3
__________________
El malabarista.
Responder Con Cita