Estoy usando SQL Server 2012 y escribí un pequeño procedimiento almacenado con la transacción de retrotracción. Mi procedimiento es el siguiente:si @@ Trancount> 0 no funciona
ALTER PROCEDURE [dbo].[uspInsertEmployee]
@EmpId int,
@EmployeeName varchar(50),
@DeptId int
AS
BEGIN
BEGIN TRY
insert into Departments values (@DeptId, 'Testing 1');
insert into Employees values (@EmpId, @EmployeeName, @DeptId);
END TRY
BEGIN CATCH
--log error here
Goto Error_Rollback
END CATCH
Error_Rollback:
IF @@TRANCOUNT > 0
BEGIN
print 'rolling back transaction' /* <- this is never printed */
ROLLBACK TRAN
END
END
Como se puede ver, en la condición Si, cuando @@ TRANCOUNT> 0, estoy tratando de deshacer la transacción, pero cuando ejecuto el procedimiento, la declaración de recuperación sea de nunca ejecutado, he depurado el procedimiento y el valor de @@ TRANCOUNT es 1. Pero aún no entiendo por qué no está funcionando. Y llegué a saber que no necesitamos usar comenzar tran y finalizar tran para revertir.
¿Alguien me puede ayudar a resolver este problema.
EDITAR
En este momento se me olvidó mencionar que, se produce un error en la segunda instrucción de inserción.
Quiere decir que sin transacción explícita, el valor trancount @@ siempre será cero rito? pero mientras estaba depurando, vi @@ valor de trancount como 1. pero no uso ningún inicio y compromiso. – Harsha
Esta es una transacción de confirmación automática y no implícita, a menos que SET IMPLICIT_TRANSACTION ON, o SET ANSI DEFAULTS ON, aunque la respuesta sea correcta. –