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.
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.
Tareas relacionadas
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)