Duda sobre transacciones.

09/02/2005 - 13:25 por JOSE ANTONIO | Informe spam
Hola, tengo una duda respecto a las transacciones de sql server.

BEGIN TRANSACTION
DECLARE @NUMERO INT,@SUMAR INT
SET @SUMAR' // este numero cambia en cada llamada
SELECT @NUMERO=MAX(NUMERO)+@SUMAR FROM TABLANUMEROS
SELECT .. un select que tarde unas veces mas y
otras menos dependiendo de los paramatetros.
INSERT TABLANUMEROS @NUMERO y el resultado del select anterior
COMMIT TRANSACCION

durante este proceso puede ser que otro usuario llame al mismo procedimiento
con el @SUMAR', si el procedimiento primero no ha terminado todavia, es
decir todavia no ha iniciado la insercion en TABLANUMEROS, y los calculos
intermedios de la segunda llamada se terminan antes que la primera llamada
con lo cual se insertan antes,sql server intentara insertar un @NUMERO que
ya esta en la tabla procedente de la segunda llamada, con lo que fallara y
dara un error de duplicacion de clave.

Esto es asi o estoy equivocado?.


Saludos.
 

Leer las respuestas

#1 Maxi
09/02/2005 - 13:46 | Informe spam
Hola, es correcto, pero si queres resolver este problema te paso un articulo
que escribi hace un tiempo ;)

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi


"JOSE ANTONIO" escribió en el mensaje
news:
Hola, tengo una duda respecto a las transacciones de sql server.

BEGIN TRANSACTION
DECLARE @NUMERO INT,@SUMAR INT
SET @SUMAR' // este numero cambia en cada llamada
SELECT @NUMERO=MAX(NUMERO)+@SUMAR FROM TABLANUMEROS
SELECT .. un select que tarde unas veces mas y
otras menos dependiendo de los paramatetros.
INSERT TABLANUMEROS @NUMERO y el resultado del select anterior
COMMIT TRANSACCION

durante este proceso puede ser que otro usuario llame al mismo
procedimiento con el @SUMAR', si el procedimiento primero no ha
terminado todavia, es decir todavia no ha iniciado la insercion en
TABLANUMEROS, y los calculos intermedios de la segunda llamada se terminan
antes que la primera llamada con lo cual se insertan antes,sql server
intentara insertar un @NUMERO que ya esta en la tabla procedente de la
segunda llamada, con lo que fallara y dara un error de duplicacion de
clave.

Esto es asi o estoy equivocado?.


Saludos.


Preguntas similares