TRANSACIONES

GPA
25 de Marzo del 2006
tengo un problema con el siguiente codigo en un procedimiento almacenado:

BEGIN TRANSACTION

DECLARE @Error int

INSERT INTO TABLA1
(
Campo1 ,
)
VALUES
(
@Valor
)

SELECT @Error = @@ERROR
IF @Error != 0 GOTO ERROR_HANDLER

UPDATE TABLA2
SET
Campo1 = 1

SELECT @Error = @@ERROR
IF @Error != 0 GOTO ERROR_HANDLER

COMMIT TRANSACTION

ERROR_HANDLER:
ROLLBACK TRANSACTION
RETURN @Error
GO

la primera tabla no existe y me devuelve este mensaje de error:

"El recuento de transacciones después de EXECUTE indica
que falta una instrucción COMMIT o ROLLBACK TRANSACTION· 
Recuento anterior = 1‚ recuento actual = 2."

¿Que estoy poniendo mal?
Gracias.

Pablo
25 de Marzo del 2006
te cuento como funciona el begin, cada vez que pones un begin se incrementa una variable de sistema, si pones tres begin esa variable ( en este momento no me acuerdo como se llama) se incrementa en 3 y para que commiteé tenes que hacer 3 commit, pero eso cuando rollbackeas tenes que dejar esa variable en cero, esto te da la posibilidad de rollbacker 1 y commitear 2.
el error es porque salis de la transaccion con esta variable distinta de 0, fijate.
espero te sirva
salu2