Desencadenadores DML

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Los desencadenadores DML constituyen un tipo especial de procedimiento almacenado que se inicia automáticamente cuando tiene lugar un evento de lenguaje de manipulación de datos (DML) que afecta a la tabla o la vista definida en el desencadenador. Los eventos DML incluyen las instrucciones INSERT, UPDATE o DELETE. Los desencadenadores DML pueden usarse para aplicar reglas de negocios y la integridad de datos, consultar otras tablas e incluir instrucciones Transact-SQL complejas. El desencadenador y la instrucción que lo activa se tratan como una sola transacción, que puede revertirse desde el desencadenador. Si se detecta un error grave (por ejemplo, no hay suficiente espacio en disco), se revierte automáticamente toda la transacción.

Ventajas de los desencadenadores DML

Los desencadenadores DML se parecen a las restricciones en que pueden aplicar la integridad de entidad o de dominio. En general, la integridad de entidad se debe exigir siempre en el nivel más bajo mediante índices que formen parte de las restricciones PRIMARY KEY y UNIQUE o que se creen independientemente de las restricciones. La integridad de dominio se debe aplicar con restricciones CHECK y la integridad referencial (RI) se debe aplicar a las restricciones de FOREIGN KEY. Los desencadenadores DML resultan de especial utilidad cuando las características permitidas por las restricciones no cubren las necesidades funcionales de la aplicación.

En la lista siguiente se comparan los desencadenadores DML con restricciones y se identifica cuándo los desencadenadores DML tienen ventaja sobre las restricciones.

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

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

    A diferencia de éstas, los desencadenadores DML pueden hacer referencia a columnas de otras tablas. Por ejemplo, un desencadenador puede utilizar una instrucción SELECT de otra tabla para comparar con los datos insertados o actualizados y para 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 realizar una modificación de datos y actuar en función de esa diferencia.

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

  • Las restricciones solo pueden comunicar la existencia de errores mediante mensajes de error estándar del sistema. Si la aplicación necesita o puede aprovechar mensajes personalizados y un control de errores más complejo, deberá usar un desencadenador.

  • Los desencadenadores DML pueden impedir o revertir los cambios que infrinjan la integridad referencial y cancelar, de ese modo, cualquier intento de modificación de los datos. Ese tipo de desencadenador puede activarse cuando se cambia una clave externa y el nuevo valor no coincide con su clave principal. No obstante, para estos casos suelen utilizarse restricciones FOREIGN KEY.

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

Tipos de desencadenadores DML

Desencadenador AFTER
Los desencadenadores AFTER se ejecutan después de llevar a cabo una acción de las instrucciones INSERT, UPDATE, MERGE o DELETE. Los desencadenadores AFTER no se ejecutan nunca si se produce una infracción de restricción; por tanto, no se puede usar estos desencadenadores para ningún procesamiento que pueda impedir infracciones de restricciones. Para cada acción INSERT, UPDATE o DELETE especificada en una instrucción MERGE, se activa el desencadenador correspondiente para cada operación DML.

Desencadenador INSTEAD OF
Los desencadenadores INSTEAD OF pasan por alto las acciones estándar de la instrucción de desencadenamiento. 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 filas. Por ejemplo, cuando el valor que se actualiza en una columna de tarifa de una hora de trabajo de una tabla de nómina supera un valor específico, se puede definir un desencadenador para producir un 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ómina. La principal ventaja de los desencadenadores INSTEAD OF es que habilitan las vistas que no serían actualizables para admitir actualizaciones. Por ejemplo, las vistas que contengan varias tablas base deben usar un desencadenador INSTEAD OF para permitir inserciones, actualizaciones y eliminaciones que hagan referencia a datos de más de una tabla. Otra ventaja de los desencadenadores INSTEAD OF es que permiten codificar la lógica para rechazar partes de un lote y, al mismo tiempo, aceptar otras partes del mismo.

En la tabla siguiente se compara la funcionalidad de los desencadenadores AFTER e INSTEAD OF.

Function Desencadenador AFTER Desencadenador INSTEAD OF
Aplicabilidad Tablas Tablas y vistas
Cantidad por tabla o vista Varios por cada acción de desencadenamiento (UPDATE, DELETE y INSERT) Uno por cada acción de desencadenamiento (UPDATE, DELETE y INSERT)
Referencias en cascada No se aplica ninguna restricción No se permiten los desencadenadores INSTEAD OF UPDATE y DELETE en tablas que son destino de las restricciones de integridad referencial en cascada
Ejecución Después:

Procesamiento de restricciones

Acciones de integridad referencial declarativa

Creación de tablasinserted y deleted

La acción de desencadenamiento
Antes: Procesamiento de restricciones

En lugar de: La acción de desencadenamiento

Después: Creación de tablas inserted y deleted
Orden de ejecución Se puede especificar la primera y la última ejecución No aplicable
Referencias a columnasvarchar(max), nvarchar(max)y varbinary(max) en tablas inserted y deleted Permitido Permitido
Referencias a columnastext, ntexty image en las tablas inserted y deleted No permitido Permitido

Desencadenadores de CLR
Un desencadenador CLR puede ser un desencadenador 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 más métodos escritos en código administrado que son miembros de un ensamblado creado en .NET Framework y cargado en SQL Server.

Tarea Tema
Describe cómo crear un desencadenador DML. Crear desencadenadores DML
Describe cómo crear un desencadenador CLR. Crear desencadenadores CLR
Describe cómo crear un desencadenador DML para administrar las modificaciones de datos en una sola fila o en múltiples filas. Crear desencadenadores DML para administrar varias filas de datos
Describe cómo anidar desencadenadores. Crear desencadenadores anidados
Describe cómo especificar el orden en el que se activan los desencadenadores AFTER. Especificar el primer y el último desencadenador
Describe cómo usar las tablas inserted y delete especiales en código del desencadenador. Usar 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 acerca de los desencadenadores DML. Obtener información acerca de los desencadenadores DML
Describe cómo eliminar o deshabilitar los desencadenadores DML. Eliminar o deshabilitar desencadenadores DML
Describe cómo administrar la seguridad de los desencadenadores. Administrar la seguridad de los desencadenadores

Consulte también

CREATE TRIGGER (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
DROP TRIGGER (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
Funciones de desencadenador (Transact-SQL)