Desencadenadores DML
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 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 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.
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 comprobación de errores o valores en una o más columnas y, a continuación, 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 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.
Función | 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 insertadas y eliminadas |
Orden de ejecución | Se puede especificar la primera y la última ejecución | No aplicable |
varchar(max) Referencias de columna , nvarchar(max) y varbinary(max) en tablas insertadas y eliminadas |
Permitida | Permitida |
text Referencias de columna , ntext y image en tablas insertadas y eliminadas |
No permitida | Permitida |
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 varios métodos escritos en código administrado que son miembros de un ensamblado creado en .NET Framework y cargados en SQL Server.
Related Tasks
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)