Problemas con Transactions, Try y Catch

05/06/2008 - 17:03 por Carlos Ruesta | Informe spam
Buenos dias,
Tengo un gran problema con el uso de transacciones controladas con try
y catch.
Aqui el código:

USE BD;
GO
CREATE PROCEDURE [dbo].[SP_TEMP]
AS
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION
Print 'Begin Transaction!!!'

INSERT INTO REGVENDA (ID_VENDA, VALOR) VALUES ('01010101',179.00)
INSERT INTO DOCVENDAXXXXXXX (ID_VENDA, COD_PROD, CANT) VALUES
('01010101','00023',1)
existe para probar el uso de tranascciones,
INSERT INTO REGVENDA (ID_VENDA, VALOR) VALUES ('01010102',119.00)
INSERT INTO DOCVENDA (ID_VENDA, COD_PROD, CANT) VALUES
('01010102','00051',1)
INSERT INTO DOCVENDA (ID_VENDA, COD_PROD, CANT) VALUES
('01010102','00079',2)

COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF (XACT_STATE()) = -1
BEGIN
ROLLBACK TRANSACTION;
PRINT 'Rollback Transaction';
RAISERROR ('ERROR, ', 16, 1);
END;
IF (XACT_STATE()) = 1
BEGIN
PRINT N'Transaccion es activa y valida, hago COMMIT... '
COMMIT TRANSACTION;
END;
END CATCH;

GO

EXECUTE [DBO].[SP_TEMP]


Al momento de ejecutar el store procedure aparece los siguientes erros
y obviamente no ejecuta el catch.

Begin Transaction!!!
Msg 208, Level 16, State 1, Procedure SP_TEMP, Line 9
Invalid object name 'DOCVENDAXXXXXXX'.
Msg 266, Level 16, State 2, Procedure SP_TEMP_VND6018420080604181352,
Line 10
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK
TRANSACTION statement is missing. Previous count = 0, current count 1.


ALGUIEN ME PUEDE AYUDAR CON ESTE PROBLEMA.

Muchas gracias.

Carlos Ruesta
 

Leer las respuestas

#1 Gux (MVP)
05/06/2008 - 18:54 | Informe spam
Agregue a su procedimiento una línea: SET XACT_ABORT ON;

justo después de la línea SET NOCOUNT ON.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Carlos Ruesta" wrote:

Buenos dias,
Tengo un gran problema con el uso de transacciones controladas con try
y catch.
Aqui el código:

USE BD;
GO
CREATE PROCEDURE [dbo].[SP_TEMP]
AS
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION
Print 'Begin Transaction!!!'

INSERT INTO REGVENDA (ID_VENDA, VALOR) VALUES ('01010101',179.00)
INSERT INTO DOCVENDAXXXXXXX (ID_VENDA, COD_PROD, CANT) VALUES
('01010101','00023',1)
existe para probar el uso de tranascciones,
INSERT INTO REGVENDA (ID_VENDA, VALOR) VALUES ('01010102',119.00)
INSERT INTO DOCVENDA (ID_VENDA, COD_PROD, CANT) VALUES
('01010102','00051',1)
INSERT INTO DOCVENDA (ID_VENDA, COD_PROD, CANT) VALUES
('01010102','00079',2)

COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF (XACT_STATE()) = -1
BEGIN
ROLLBACK TRANSACTION;
PRINT 'Rollback Transaction';
RAISERROR ('ERROR, ', 16, 1);
END;
IF (XACT_STATE()) = 1
BEGIN
PRINT N'Transaccion es activa y valida, hago COMMIT... '
COMMIT TRANSACTION;
END;
END CATCH;

GO

EXECUTE [DBO].[SP_TEMP]


Al momento de ejecutar el store procedure aparece los siguientes erros
y obviamente no ejecuta el catch.

Begin Transaction!!!
Msg 208, Level 16, State 1, Procedure SP_TEMP, Line 9
Invalid object name 'DOCVENDAXXXXXXX'.
Msg 266, Level 16, State 2, Procedure SP_TEMP_VND6018420080604181352,
Line 10
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK
TRANSACTION statement is missing. Previous count = 0, current count > 1.


ALGUIEN ME PUEDE AYUDAR CON ESTE PROBLEMA.

Muchas gracias.

Carlos Ruesta

Preguntas similares