Compartir a través de


Desencadenadores DML

Los desencadenadores DML son un tipo especial de procedimiento almacenado que surte efecto automáticamente cuando se produce un evento de lenguaje de manipulación de datos (DML) que afecta a la tabla o vista definida en el desencadenador. Los eventos DML incluyen instrucciones INSERT, UPDATE o DELETE. Los desencadenadores DML se pueden usar para aplicar reglas de negocio e integridad de datos, consultar otras tablas e incluir instrucciones Transact-SQL complejas. El desencadenador y la instrucción que lo activan se tratan como una sola transacción, que se puede revertir desde dentro del desencadenador. Si se detecta un error grave (por ejemplo, espacio en disco insuficiente), toda la transacción se revierte automáticamente.

Ventajas del desencadenador DML

Los desencadenadores DML son similares a las restricciones en que pueden aplicar la integridad de la entidad o la integridad del dominio. En general, la integridad de la entidad siempre debe aplicarse en el nivel más bajo por índices que forman parte de las restricciones PRIMARY KEY y UNIQUE, o se crean independientemente de las restricciones. La integridad del dominio debe aplicarse a través de restricciones CHECK y se debe aplicar la integridad referencial (RI) a través de restricciones FOREIGN KEY. Los desencadenadores DML son más útiles cuando las características admitidas por restricciones no pueden satisfacer las necesidades funcionales de la aplicación.

En la lista siguiente se comparan los desencadenadores DML con restricciones e identifica cuándo los desencadenadores DML tienen ventajas sobre .

  • Los desencadenadores DML pueden realizar cambios en cascada a través de tablas relacionadas de la base de datos; sin embargo, estos cambios se pueden ejecutar de forma más eficaz mediante restricciones de integridad referencial en cascada. Las restricciones FOREIGN KEY solo pueden validar un valor de columna con una coincidencia exacta con un valor de otra columna, a menos que la cláusula REFERENCES defina una acción referencial en cascada.

  • Pueden protegerse contra operaciones INSERT, UPDATE y DELETE malintencionadas o incorrectas y aplicar otras restricciones más complejas que las definidas con restricciones CHECK.

    A diferencia de las restricciones CHECK, los desencadenadores DML pueden hacer referencia a columnas de otras tablas. Por ejemplo, un desencadenador puede usar una instrucción SELECT de otra tabla para comparar los datos insertados o actualizados y realizar acciones adicionales, como modificar los datos o mostrar un mensaje de error definido por el usuario.

  • Pueden evaluar el estado de una tabla antes y después de una modificación de datos y realizar acciones en función de esa diferencia.

  • Varios desencadenadores DML del mismo tipo (INSERT, UPDATE o DELETE) en una tabla permiten realizar varias acciones diferentes en respuesta a la misma instrucción de modificación.

  • Las restricciones solo pueden comunicarse sobre errores a través de mensajes de error del sistema estandarizados. Si la aplicación requiere o puede beneficiarse de mensajes personalizados y un control de errores más complejo, debe usar un desencadenador.

  • Los desencadenadores DML pueden impedir o revertir los cambios que infringen la integridad referencial, lo que cancela la modificación de los datos intentados. Este desencadenador podría entrar en vigor cuando se cambia una clave externa y el nuevo valor no coincide con su clave principal. Sin embargo, las restricciones FOREIGN KEY normalmente se usan para este propósito.

  • Si existen restricciones en la tabla de desencadenadores, se comprueban después de la ejecución del desencadenador INSTEAD OF, pero antes de la ejecución del desencadenador AFTER. Si se infringen las restricciones, las acciones del trigger INSTEAD OF se revierten y el trigger AFTER no se ejecutará.

Tipos de desencadenadores DML

Desencadenador AFTER
Los desencadenadores AFTER se ejecutan después de realizar la acción de la instrucción INSERT, UPDATE, MERGE o DELETE. Los desencadenadores AFTER nunca se ejecutan si se produce una infracción de restricción; por lo tanto, estos desencadenadores no se pueden usar para ningún procesamiento que pueda evitar infracciones de restricciones. Para cada acción INSERT, UPDATE o DELETE especificada en una instrucción MERGE, se desencadena el desencadenador correspondiente para cada operación DML.

Desencadenador INSTEAD OF
LOS desencadenadores INSTEAD OF invalidan las acciones estándar de la instrucción desencadenador. Por lo tanto, se pueden usar para realizar la comprobación de errores o valores en una o varias columnas y realizar acciones adicionales antes de insertar, actualizar o eliminar la fila o las filas. Por ejemplo, cuando el valor que se actualiza en una columna de salario por hora en una tabla de nóminas supera un valor especificado, se puede definir un desencadenador para generar un mensaje de error y revertir la transacción, o insertar un nuevo registro en un registro de auditoría antes de insertar el registro en la tabla de nóminas. La principal ventaja de los desencadenadores INSTEAD OF es que habilitan vistas que no serían actualizables para admitir actualizaciones. Por ejemplo, una vista basada en varias tablas base debe usar un desencadenador INSTEAD OF para admitir inserciones, actualizaciones y elimina los datos de referencia de más de una tabla. Otra ventaja de los desencadenadores INSTEAD OF es que permiten codificar la lógica para rechazar ciertas partes de un lote mientras que otras tienen éxito.

En esta tabla se compara la funcionalidad de los desencadenadores AFTER y INSTEAD OF.

Función Desencadenador AFTER Desencadenador INSTEAD OF
Aplicabilidad Tablas Tablas y vistas
Cantidad por tabla o vista Varias acciones por desencadenador (UPDATE, DELETE e INSERT) Una por acción desencadenadora (UPDATE, DELETE e INSERT)
Referencias en cascada No se aplican restricciones No se permiten los triggers INSTEAD OF UPDATE y DELETE en tablas que son objeto de restricciones de integridad referencial en cascada.
Ejecución Después:

Procesamiento de restricciones
Acciones referenciales declarativas
creación de tablas insertadas y eliminadas
Acción de desencadenamiento
Antes: Procesamiento de restricciones

En lugar de: La acción desencadenante

Después: creación de tablas insertadas y eliminadas
Orden de ejecución Se puede especificar la primera y la última ejecución No aplicable
varchar(max), nvarchar(max) y varbinary(max) referencias de columna en tablas insertadas y eliminadas Permitido Permitido
Referencias de columna text, ntext y image en tablas insertadas y eliminadas No permitida Permitido

Desencadenadores CLR
Un desencadenador CLR puede ser un desencadenador de tipo AFTER o INSTEAD OF. Un desencadenador CLR también puede ser un desencadenador DDL. En lugar de ejecutar un procedimiento almacenado de Transact-SQL, un desencadenador CLR ejecuta uno o varios métodos escritos en código administrado que son miembros de un ensamblado creado en .NET Framework y cargados en SQL Server.

Tarea Tema
Describe cómo crear un desencadenador DML. Creación de desencadenadores DML
Describa cómo crear un desencadenador CLR. Creación de desencadenadores CLR
Describe cómo crear un desencadenador DML para controlar las modificaciones de datos de una sola fila y de varias filas. Crear desencadenadores DML para controlar varias filas de datos
Describe cómo anidar los desencadenadores. Crear desencadenadores anidados
Se describe cómo especificar el orden en el que se ejecutan los desencadenadores tipo AFTER. Especificar los desencadenadores primero y último
Describe cómo usar las tablas insertadas y eliminadas especiales en el código de desencadenador. Utilice las tablas insertadas y eliminadas
Describe cómo modificar o cambiar el nombre de un desencadenador DML. Modificar o cambiar el nombre de desencadenadores DML
Describe cómo ver información sobre los desencadenadores DML. Obtener información sobre los desencadenadores DML
Describe cómo eliminar o deshabilitar desencadenadores DML. Eliminar o deshabilitar desencadenadores DML
Describe cómo administrar la seguridad del desencadenador. Administración de la seguridad del desencadenador

Véase también

CREATE TRIGGER (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
Desactivar el disparador (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
Funciones de desencadenador (Transact-SQL)