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
En este artículo se describe cómo crear un desencadenador de lenguaje de manipulación de datos (DML) Transact-SQL con SQL Server Management Studio o la instrucción Transact-SQL CREATE TRIGGER .
Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2025 o AdventureWorksDW2025, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.
Limitaciones
Para obtener una lista de las limitaciones y restricciones relacionadas con la creación de desencadenadores DML, consulte CREATE TRIGGER.
Permisos
Requiere ALTER permiso en la tabla o vista en la que se está creando el desencadenador.
Creación de un desencadenador DML
Puede utilizar uno de los siguientes métodos:
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 Bases de datos, expanda la
AdventureWorks2025base de datos , tablas y, a continuación, expanda la tablaPurchasing.PurchaseOrderHeader.Haga clic con el botón derecho en Desencadenadoresy, después, seleccione Nuevo desencadenador.
En el menú Consulta , seleccione 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 Author Su nombre. Fecha de creación Fecha Descripción Comprueba la solvencia del proveedor antes de permitir que se inserte un nuevo pedido de compra con el proveedor. Schema_Name PurchasingTrigger_Name NewPODetail2Table_Name PurchaseOrderDetailData_Modification_Statement Quite UPDATEyDELETEde la lista.Selecciona Aceptar.
En el Editor de consultas, reemplace el comentario
-- Insert statements for trigger herecon 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 , seleccione Analizar. Si se devuelve un mensaje de error, compare la instrucción con el bloque de código anterior, corrija según sea necesario y repita este paso.
Para crear el desencadenador DML, en el menú Consulta , seleccione 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.
Uso de 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 , seleccione Nueva consulta.
Copie y pegue el ejemplo siguiente en la ventana de consulta y seleccione Ejecutar. En este ejemplo se crea el mismo desencadenador DML almacenado que antes. El desencadenador es válido para inserciones de varias filas y únicas y óptimas para inserciones de fila única.
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;