Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
El desencadenador DML es 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 las instrucciones INSERT, las instrucciones UPDATE, o las instrucciones 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
Los desencadenadores DML se parecen a las restricciones en que pueden aplicar la integridad de entidad o de dominio. En general, la integridad de la entidad siempre debe aplicarse en el nivel más bajo mediante índices que forman parte de PRIMARY KEY y UNIQUE restricciones o que se crean independientemente de las restricciones. La integridad del dominio debe aplicarse a través CHECK de restricciones y se debe aplicar la integridad referencial (RI) a través FOREIGN KEY de restricciones. 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.
FOREIGN KEYlas restricciones pueden validar un valor de columna solo con una coincidencia exacta con un valor de otra columna, a menos que laREFERENCEScláusula defina una acción referencial en cascada.Pueden protegerse contra operaciones malintencionadas o incorrectas
INSERT,UPDATEyDELETE, y aplicar otras restricciones más complejas que las definidas con restriccionesCHECK.A diferencia de las restricciones
CHECK, los desencadenadores DML pueden hacer referencia a columnas de otras tablas. Por ejemplo, un desencadenador puede usar un elementoSELECTde otra tabla para comparar con los datos insertados o actualizados y realizar otras acciones, 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,UPDATEoDELETE) en una tabla permiten realizar varias acciones diferentes en respuesta a la 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 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,
FOREIGN KEYlas restricciones se utilizan normalmente para este fin.Si existen restricciones en la tabla del desencadenador, se comprueban después de la ejecución del
INSTEAD OFdesencadenador, pero antes de la ejecución delAFTERdesencadenador. Si se infringen las restricciones, las acciones del disparadorINSTEAD OFse deshacen y el disparadorAFTERno se ejecuta.
Tipos de desencadenador DML
Desencadenador AFTER
AFTER Los desencadenadores se ejecutan después de que se realice la acción de la instrucción INSERT, UPDATE, MERGE o DELETE.
AFTER Los desencadenadores 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, el desencadenador correspondiente se activa 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 otras acciones 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, una vista basada en varias tablas base debe usar un INSTEAD OF desencadenador para admitir inserciones, actualizaciones y eliminaciones que hacen referencia a datos en 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 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, DELETEy INSERT) |
Una por acción desencadenador (UPDATE, DELETEy INSERT) |
| Referencias en cascada | No se aplica ninguna restricción | Los desencadenadores INSTEAD OF UPDATE y DELETE no están permitidos en las tablas que son destinos de restricciones de integridad referencial en cascada. |
| Ejecución | Después: Procesamiento de restricciones Acciones de integridad referencial declarativa inserted y deleted creación de tablasLa acción de desencadenamiento |
Antes: Procesamiento de restricciones En lugar de: La acción de desencadenamiento Después de la creación de tablas: inserted y deleted |
| Orden de ejecución | Es posible que se especifique la primera y la última ejecución. | No aplicable |
varchar(max), nvarchar(max) y varbinary(max) referencias de columna en inserted y deleted las tablas |
Permitida | Permitida |
Las referencias de columna text, ntext e image en tablas inserted y deleted |
No permitida | Permitida |
Desencadenador CLR
Un desencadenador del entorno de ejecución común (CLR) puede ser un desencadenador AFTER o INSTEAD OF. Un desencadenador CLR también puede ser un desencadenador del Lenguaje de Definición de Datos (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.
Tareas relacionadas
| Tarea | Artículo |
|---|---|
| Describe cómo crear un desencadenador DML. | Creación de desencadenadores DML |
| Describe cómo crear un desencadenador CLR. | Creación de 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 que los desencadenadores AFTER se activan. |
Especificar el primer y el último desencadenador |
| Describe cómo usar las tablas inserted y delete especiales en código del 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 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. | Administración de la seguridad del desencadenador |