Usar desencadenadores DML que incluyan COMMIT o ROLLBACK TRANSACTION

En las versiones de SQL Server posteriores a SQL Server versión 7.0, el recuento de transacciones se incrementa dentro de una instrucción únicamente cuando el valor de dicho recuento es 0 al inicio de la instrucción. En SQL Server versión 7.0, el recuento de transacciones siempre aumenta, independientemente del recuento al inicio de la instrucción. Por lo tanto, el valor que @@TRANCOUNT devuelve en los desencadenadores puede ser inferior en las últimas versiones que en SQL Server 7.0.

En las últimas versiones, si se ejecuta una instrucción COMMIT TRANSACTION o COMMIT WORK en un desencadenador y no hay ninguna instrucción BEGIN TRANSACTION implícita o explícita correspondiente al inicio del desencadenador, es posible que los usuarios observen un comportamiento diferente que en SQL Server versión 7.0.No se recomienda colocar instrucciones COMMIT TRANSACTION o COMMIT WORK en un desencadenador.

Al ejecutar desde un lote desencadenadores que incluyen instrucciones COMMIT o ROLLBACK TRANSACTION, se cancela todo el lote. En SQL Server 2008 y SQL Server 2005 se devuelve también un error.

En el ejemplo siguiente, si las instrucciones INSERT activan un desencadenador DML que incluye una instrucción ROLLBACK TRANSACTION, la instrucción DELETE no se ejecutará porque se cancela el lote.

/* Start of Batch */
INSERT employee VALUES ('XYZ12345M', 'New', 'M', 'Employee', 1, 1, '9952', '6/1/95') -- Causes trigger to fire and ROLLBACK TRANSACTION.
DELETE employee WHERE emp_id = 'PMA42628M'
GO

Si los desencadenadores que incluyen instrucciones ROLLBACK TRANSACTION se activan desde una transacción definida por el usuario, ROLLBACK TRANSACTION revierte toda la transacción. En el siguiente ejemplo, si la instrucción INSERT activa un desencadenador que incluye ROLLBACK TRANSACTION, también se revierte la instrucción UPDATE:

/* Start of Transaction */
BEGIN TRANSACTION
UPDATE employee SET hire_date = '7/1/94' WHERE emp_id = 'VPA30890F'
INSERT employee VALUES ('XYZ12345M', 'New', 'M', 'Employee', 1, 1, '9952', '6/1/95') -- Causes trigger to fire and ROLLBACK TRANSACTION.