ASP - Transacciones y bloqueos

 
Vista:

Transacciones y bloqueos

Publicado por drcrs (1 intervención) el 16/07/2009 14:41:30
Hola! queria pedirles una ayuda con lo siguiente:
Tengo una base en sql server la cual tiene una tabla llamada "numerador". Dicha tabla tiene un campo "pedido" en donde se guarda el numero del proximo pedido a ingresar para una aplicacion.
Con lo cual cuando alguien carga un pedido, primero lee ese campo y luego lo actualiza incrementandolo (el incremento no es siempre en uno, es variable!)

El problema que tengo es que cuando hay mucha concurrencia, se crean pedidos con numero duplicado.

Queria saber cual es el mejor mecanismo que puedo implementar primero para que no se dupliquen los numeros y luego para que no haya problemas con bloqueos.

Les copio el ejemplo del codigo, muchas gracias a todos!
saludos

'La funcion devuelve el numero de pedido a utilizar
'Recibe el incremento que se aplicara en el numerador
Function Numerador (incremento)

Dim rsNumero
Set rsNumero = server.CreateObject("adodb.recordset")

Numerador=-1

'dbconn es una conexion ya abierta
dbConn.Begintrans

'Obtiene el numero de pedido
Set rsNumero = dbConn.Execute("SELECT pedido FROM numerador",,1)

'Error?
If Err.Number Then
dbConn.Rollbacktrans
dbConn.close
Set rsNumero = Nothing
Else

'Obtiene el nuevo numero de pedido
Numerador=rsNumero("pedido")
rsNumero.Close

'Actualiza el numerador de pedido
Set rsNumero = dbConn.Execute("UPDATE numerador SET pedido=pedido + " & incremento,,1)
If Err.Number Then
dbConn.Rollbacktrans
Set rsNumero = Nothing
set dbConn = Nothing
Numerador=-1
Else

'Commit
dbConn.Committrans
End If

End If

Set rsNumero = Nothing

End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Transacciones y bloqueos

Publicado por weirdmix (210 intervenciones) el 01/09/2009 20:48:18
esto es mejor hacerlo con un store procedure dentro de la base de datos para que no tengas ese tipo de problema, ahora, porque necesitas q el incremento sea variable? si es un contador deberia ser de 1 en 1 y dejar q la misma base de datos lo maneje...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar