Triggers (Desencadenadores) en Sql Server
Aspectos básicos
Los triggers son un tipo especial de procedimientos almacenados que se ejecutan automáticamente al producirse una modificación de una tabla. Los triggers poseen la utilidad de integrar en la base de datos decisiones de negocio asociadas a los propios datos, sin que sea necesario programar procedimientos externos. Permiten mantener coherencia semántica en la base de datos.

Se suelen utilizar para:
-Implementar restricciones complejas de seguridad o integridad.
-Prevenir transacciones erróneas.
-Implementar reglas administrativas complejas.
-Generar automáticamente valores derivados.
-Auditar las actualizaciones e, incluso, enviar alertas.
-Gestionar replicas remotas de la tabla.
-Implementar restricciones complejas de seguridad o integridad.
-Prevenir transacciones erróneas.
-Implementar reglas administrativas complejas.
-Generar automáticamente valores derivados.
-Auditar las actualizaciones e, incluso, enviar alertas.
-Gestionar replicas remotas de la tabla.
Los disparadores se ejecutan DESPUES de la ejecución de una instrucción "insert", "update" o "delete" en la tabla en la que fueron definidos. Las restricciones se comprueban ANTES de la ejecución de una instrucción "insert", "update" o "delete". Por lo tanto, las restricciones se comprueban primero, si se infringe alguna restricción, el desencadenador no llega a ejecutarse.
Los triggers se crean con la instrucción "create trigger". Esta instrucción especifica la tabla en la que se define el disparador, los eventos para los que se ejecuta y las instrucciones que contiene.
Cómo funciona un desencadenador INSERT
1 Se ejecuta la instrucción INSERT
2 Se registra la instrucción INSERT
3 Se ejecuta el desencadenador AFTER INSERT
CREATE TRIGGER [insrtWorkOrder] ON [Production].[WorkOrder] AFTER INSERT AS BEGIN SET NOCOUNT ON; INSERT INTO [Production].[TransactionHistory]( [ProductID],[ReferenceOrderID],[TransactionType] ,[TransactionDate],[Quantity],[ActualCost]) SELECT inserted.[ProductID],inserted.[WorkOrderID] ,'W',GETDATE(),inserted.[OrderQty],0 FROM inserted; End
Cómo funciona un desencadenador DELETE
1 Se ejecuta la instrucción DELETE2 Se registra la instrucción DELETE3 Se ejecuta el desencadenador AFTER DELETECREATE TRIGGER [delCustomer] ON [Sales].[Customer]AFTER DELETE ASBEGINSET NOCOUNT ON;EXEC master..xp_sendmail@recipients=N'SalesManagers@Adventure-Works.com',@message = N'Customers have been deleted!!';END;Cómo funciona un desencadenador UPDATE1 Se ejecuta la instrucción UPDATE2 Se registra la instrucción UPDATE3 Se ejecuta el desencadenador AFTER UPDATECREATE TRIGGER [updtProductReview] ON[Production].[ProductReview]AFTER UPDATE NOT FOR REPLICATION ASBEGINUPDATE [Production].[ProductReview]SET [Production].[ProductReview].[ModifiedDate] =GETDATE() FROM insertedWHERE inserted.[ProductReviewID] =[Production].[ProductReview].[ProductReviewID];END;Cómo funciona un desencadenador INSTEAD OF1. Se ejecuta la instrucción UPDATE, INSERT o DELETE.2. La instrucción ejecutada no se realiza.3. Se ejecutan las instrucciones del desencadenador INSTEAD OF.CREATE TRIGGER [delEmployee] ON [HumanResources].[Employee]INSTEAD OF DELETE NOT FOR REPLICATION AS BEGINSET NOCOUNT ON; DECLARE @DeleteCount int;SELECT @DeleteCount = COUNT(*) FROM deleted;IF @DeleteCount > 0 BEGIN…END;END;Consideraciones sobre los desencadenadores recursivosEstán deshabilitados de forma predeterminada.ALTER DATABASE AdventureWorks SET RECURSIVE_TRIGGERS ONPara habilitarlos: Consideraciones:
- Puede superar el límite de anidamiento de 32 niveles sin necesidad de realizar un diseño cuidadoso y unas pruebas exhaustivas
- Puede resultar difícil controlar el orden de las actualizaciones de tabla
- Se puede reemplazar con lógica no recursiva
No hay comentarios.:
Publicar un comentario