Compartir vía


Creación de desencadenadores DML

Se aplica a:SQL ServerAzure SQL DatabaseInstancia 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

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.

  2. Expanda Bases de datos, expanda la AdventureWorks2025 base de datos , tablas y, a continuación, expanda la tabla Purchasing.PurchaseOrderHeader.

  3. Haga clic con el botón derecho en Desencadenadoresy, después, seleccione Nuevo desencadenador.

  4. 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 .

  5. 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 Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Quite UPDATE y DELETE de la lista.
  6. Selecciona Aceptar.

  7. 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;
    
  8. 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.

  9. Para crear el desencadenador DML, en el menú Consulta , seleccione Ejecutar. El desencadenador DML se crea como un objeto de la base de datos.

  10. 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

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y, a continuación, expándala.

  2. En el menú Archivo , seleccione Nueva consulta.

  3. 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;