Generar numeros sequenciales de forma rapida -parte 2

He probado de la sgte manera el de traer nro unicos
Begin Try
begin tran
select @NroTick=Nrocupon from cupones where id=1
insert into detalle(NroCelular,IdServicio,Respuesta,IdPregunta,IdPrincipal,NroCupon) values ( @Telefono,@IdServicio,@TextoIn,@Pregunta,@IdPrincipal,@NroTick)
update cupones set nrocupon=@NroTick+1 where id =1
commit tran
Set @RespFinal= 'Tu numero de Cupon es '+ cast(@NroTick as nvarchar) End Try
Begin Catch
rollback
Set @RespFinal= 'Muchas gracias por participar ya tienes acumulados ' + cast(@CantMensaje as nvarchar) + @cantcup
End Catch
como veran hago primero un select para recuperar el nro unico.Pero colocando en el sistema visto que algunas vecez (pocas) se repetia en nro de cupon. Ahora probare de la otra forma , haciendo el update primero y luego el select, porque me comentaron que el select no bloquea y el update si.Entonces mi consulta quedaria asi:
Begin Try
begin tran
update cupones set nrocupon=nrocupon+1 where id =1
if @@rowcount=1
begin
Declare @NroTick int
select @NroTick=Nrocupon from cupones where id=1
end
commit tran
begin tran
if @NroTick is not null
begin
insert into detalle(NroCelular,IdServicio,Respuesta,IdPregunta,IdPrincipal,NroCupon) values ( @Telefono,@IdServicio,@TextoIn,@Pregunta,@IdPrincipal,@NroTick)
Set @RespFinal= 'Tu numero de Cupon es '+ cast(@NroTick as nvarchar) end
commit tran

End Try
Begin Catch
rollback
Set @RespFinal= 'Muchas gracias por participar ya tienes acumulados ' + cast(@CantMensaje as nvarchar) + @cantcup
End Catch

Ojo; Estoy hablando de mucha concurrencia en poco periodo de tiempo, como son los concursos de sms por TV.

Saludos
Adalberto Montania

Comentarios