Crear desencadenadores DML
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
En este tema se describe cómo se crea un desencadenador DML de Transact-SQL con SQL Server Management Studio y la instrucción CREATE TRIGGER de Transact-SQL.
Antes de empezar
Limitaciones y restricciones
Para obtener una lista de las limitaciones y restricciones relacionadas con la creación de desencadenadores DML, vea CREATE TRIGGER (Transact-SQL).
Permisos
Es necesario contar con permiso ALTER sobre la tabla o vista en la que se crea el desencadenador.
Cómo crear un desencadenador DML
Puede usar cualquiera de los siguientes medios:
Uso de SQL Server Management Studio
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.
Expanda Databases, expanda la base de datos
AdventureWorks2022
, expanda Tablas y a continuación expanda la tabla Purchasing.PurchaseOrderHeader.Haga clic con el botón derecho en Desencadenadoresy, después, seleccione Nuevo desencadenador.
En el menú Consulta , haga clic en Especificar valores para parámetros de plantilla. También puede pulsar (Ctrl+Mayús+M) para abrir el cuadro de diálogo Especificar valores para parámetros de plantilla .
En el cuadro de diálogo Especificar valores para parámetros de plantilla , especifique los siguientes valores para los parámetros mostrados.
Parámetro Valor Autor Su nombre. Create Date Fecha Descripción Comprueba la solvencia del proveedor antes de permitir que se inserte un nuevo pedido de compra con el proveedor. Schema_Name Compras Trigger_Name NewPODetail2 Table_Name PurchaseOrderDetail Data_Modification_Statement Quite UPDATE y DELETE de la lista. Haga clic en OK.
En el Editor de consultas, reemplace el comentario
-- Insert statements for trigger here
con la instrucción siguiente:IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;
Para comprobar que la sintaxis es válida, en el menú Consulta , haga clic en Analizar. Si se devuelve un mensaje de error, compare la instrucción con la información anterior y corrija lo que sea necesario y repita este paso.
Para crear el desencadenador DML, en el menú Consulta , haga clic en Ejecutar. El desencadenador DML se crea como un objeto de la base de datos.
Para ver el desencadenador DML que aparece en el Explorador de objetos, haga clic con el botón derecho en Desencadenadores y seleccione Actualizar.
Usar Transact-SQL
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.
En el menú Archivo , haga clic en Nueva consulta.
Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar. Este ejemplo crea el mismo desencadenador DML almacenado que antes.
-- Trigger valid for multirow and single row inserts -- and optimal for single row inserts. USE AdventureWorks2022; GO CREATE TRIGGER NewPODetail3 ON Purchasing.PurchaseOrderDetail FOR INSERT AS IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;