Directrices para ejecutar el desencadenador logon

En este tema se ofrecen directrices para especificar la orden de activación de los desencadenadores logon y para administrar las transacciones dentro de estos desencadenadores.

Especificar el primer y el último desencadenador

Se pueden definir varios desencadenadores en el evento LOGON. Cualquiera de estos desencadenadores se pueden designar como el primero o el último en activarse en un evento mediante el procedimiento almacenado del sistema sp_settriggerorder. SQL Server no garantiza el orden de ejecución del resto de desencadenadores. Para obtener más información, vea Diseñar e implementar almacenamiento estructurado (motor de base de datos).

Administrar transacciones

Antes de que SQL Server active un desencadenador logon, SQL Server crea una transacción implícita que es independiente de cualquier transacción de usuario. Por tanto, cuando el primer desencadenador logon inicia la activación, el recuento de transacciones es 1. Una vez que los desencadenadores logon terminan de ejecutarse, se confirma la transacción. Como con cualquier otro tipo de desencadenadores, SQL Server devuelve un error si un desencadenador logon termina la ejecución con un recuento de transacciones de 0. La instrucción ROLLBACK TRANSACTION restablece el recuento de transacciones a 0, aunque la instrucción se emitiera dentro de una transacción anidada. COMMIT TRANSACTION puede reducir el recuento de transacciones a 0. Por tanto, aconsejamos no emitir instrucciones COMMIT TRANSACTION dentro de los desencadenadores logon.

Piense lo siguiente cuando esté utilizando una instrucción ROLLBACK TRANSACTION dentro de los desencadenadores logon:

  • Se revierten todas las modificaciones de datos realizadas antes de emitir la instrucción ROLLBACK TRANSACTION. Estas modificaciones incluyen las realizadas por el desencadenador actual y las realizadas por desencadenadores anteriores ejecutados en el mismo evento. No se ejecutan los desencadenadores restantes para el evento específico.

  • El desencadenador actual continúa ejecutando cualquier instrucción restante que aparezca después de la instrucción ROLLBACK. Si alguna de estas instrucciones modifica datos, no se revierten las modificaciones.

Una sesión de usuario no está establecida si se produce cualquiera de las siguientes condiciones durante la ejecución de un desencadenador en un evento LOGON:

  • La transacción implícita original se revierte o produce un error.

  • Un error con una gravedad mayor que 20 se genera dentro del cuerpo del desencadenador.