Published on

July 15, 2001

Comprendiendo los Triggers en SQL Server

Los Triggers son una característica poderosa en SQL Server que te permiten automatizar acciones basadas en eventos específicos u operaciones realizadas en una tabla. En este artículo, exploraremos el concepto de los Triggers y discutiremos cuándo y cómo utilizarlos de manera efectiva.

¿Qué son los Triggers y cuándo se ejecutan?

Los Triggers son procedimientos almacenados especiales que se ejecutan automáticamente en respuesta a ciertas declaraciones T-SQL. Se pueden crear para responder a operaciones de INSERCIÓN, ACTUALIZACIÓN y/o ELIMINACIÓN a nivel de tabla. Por ejemplo, puedes crear un Trigger que se ejecute después de una operación de INSERCIÓN en una tabla específica.

Los Triggers se crean utilizando la declaración CREATE TRIGGER, similar a la creación de un procedimiento almacenado estándar. El Trigger está asociado con una tabla específica y se puede configurar para que se ejecute antes o después de la operación especificada. Se pueden definir múltiples Triggers para una sola operación en una tabla, pero no se garantiza el orden de ejecución.

Aquí tienes un ejemplo de un Trigger que se ejecuta después de una operación de ELIMINACIÓN en la tabla Employees:

CREATE TRIGGER trig_delete_Employees ON Employees FOR DELETE AS 
    INSERT INTO EmployeesHistory 
    SELECT EmployeeID, FirstName, LastName, 'Deleted' Operation FROM deleted

Cuándo utilizar Triggers

Los Triggers pueden ser útiles en varios escenarios donde otros mecanismos, como la Integridad Referencial Declarativa (IRD), no son suficientes. Aquí tienes algunas situaciones donde los Triggers pueden ser beneficiosos:

  • Registro de cambios en los datos: Los Triggers se pueden utilizar para registrar todas las operaciones de cambio de datos en una tabla específica. Esto puede ser útil para fines de auditoría.
  • Modificación de columnas calculadas: Los Triggers pueden actualizar ciertas columnas “calculadas”, como totales acumulados, sin necesidad de realizar consultas agregadas costosas.

Cuándo evitar Triggers

Aunque los Triggers pueden ser poderosos, también tienen cierto costo adicional. Aquí tienes algunos casos donde podría ser mejor considerar enfoques alternativos:

  • Integridad Referencial Declarativa (IRD): Si la IRD puede hacer cumplir la integridad referencial requerida entre bases de datos o garantizar una relación específica, generalmente es una mejor opción.
  • Disparo selectivo: Si un Trigger necesita ejecutarse solo para un pequeño subconjunto de operaciones posibles, podría ser más eficiente manejar la lógica en procedimientos almacenados o código de aplicación.

Triggers Anidados y Recursivos

SQL Server admite Triggers anidados, que son Triggers que se ejecutan debido a acciones de otros Triggers. Esto puede ser útil cuando no se admiten actualizaciones o eliminaciones en cascada basadas en relaciones de clave externa en la base de datos.

Los Triggers recursivos son un caso especial de Triggers anidados donde un Trigger eventualmente se llama a sí mismo. Esto puede crear escenarios complejos y está desactivado de forma predeterminada. Sin embargo, los Triggers recursivos se pueden habilitar a nivel de base de datos si es necesario.

Las tablas Inserted y Deleted

Cuando trabajas con Triggers, tienes acceso a dos tablas especiales: inserted y deleted. Estas tablas contienen las filas afectadas por la operación que desencadena el Trigger.

Para operaciones de INSERCIÓN o ELIMINACIÓN, las tablas inserted y deleted son autoexplicativas. Sin embargo, para operaciones de ACTUALIZACIÓN, la tabla deleted contiene las filas antiguas antes del cambio, mientras que la tabla inserted contiene las filas nuevas después del cambio.

Es importante tener en cuenta que las tablas inserted y deleted no incluyen columnas con tipos de datos de texto, ntext o imagen. Si necesitas manejar este tipo de columnas, deberás utilizar procedimientos almacenados en lugar de Triggers.

Triggers y Transacciones

Los Triggers se pueden utilizar dentro de transacciones para garantizar que múltiples actualizaciones tengan éxito o fracasen en su totalidad. Si se llama a ROLLBACK TRANSACTION dentro de un Trigger, se deshacen todos los cambios realizados dentro de la transacción, incluidas las actualizaciones en otras tablas.

Incluso si no se declara explícitamente una transacción, los Triggers operan dentro de una transacción implícita. Esto significa que llamar a ROLLBACK TRANSACTION desde un Trigger deshará cualquier cambio realizado dentro del Trigger, incluso si la transacción no se inició explícitamente.

Conclusión

En este artículo, hemos explorado el concepto de los Triggers en SQL Server. Los Triggers son herramientas poderosas que te permiten automatizar acciones basadas en eventos o operaciones específicas. Hemos discutido cuándo utilizar Triggers y cuándo considerar enfoques alternativos. También hemos hablado sobre Triggers anidados y recursivos, las tablas inserted y deleted, y cómo los Triggers interactúan con las transacciones.

En el próximo artículo, profundizaremos en las diferencias entre SQL Server 7.0 y 2000, centrándonos en la Integridad Referencial Declarativa (IRD) actualizada y la inclusión de Triggers INSTEADOF.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.