Compartir a través de


Crear desencadenadores DML

En este tema se describe cómo crear un desencadenador DML de Transact-SQL mediante SQL Server Management Studio y mediante la instrucción Transact-SQL CREATE TRIGGER.

Antes de empezar

Limitaciones y restricciones

Para obtener una lista de las limitaciones y restricciones relacionadas con la creación de desencadenadores DML, consulte CREATE TRIGGER (Transact-SQL).

Permisos

Requiere el permiso ALTER en la tabla o vista en la que se está creando el desencadenador.

Cómo crear un desencadenador DML

Puede usar cualquiera de los siguientes medios:

Uso de SQL Server Management Studio

  1. En el Explorador de objetos, conéctese a una instancia del motor de base de datos y expanda esa instancia.

  2. Expanda Bases de datos, expanda la base de datos AdventureWorks2012, expanda Tablas y luego expanda la tabla Purchasing.PurchaseOrderHeader.

  3. Haga clic con el botón derecho en Desencadenadores y, a continuación, seleccione Nuevo desencadenador.

  4. En el menú Consulta, haga clic en Especificar Valores para Parámetros de Plantilla. Como alternativa, puede presionar (Ctrl-Shift-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 , escriba los valores siguientes para los parámetros que se muestran.

    Parámetro Importancia
    Autor Tu nombre
    Fecha de creación La fecha de hoy
    Descripción Comprueba la clasificación de crédito del proveedor antes de permitir que se inserte un nuevo pedido de compra con el proveedor.
    Schema_Name Compras
    Trigger_Name NewPODetail2
    Table_Name DetalleDeOrdenDeCompra
    Data_Modification_Statement Quiten UPDATE y DELETE de la lista.
  6. Haz clic en Aceptar.

  7. En el Editor de consultas, reemplace el comentario -- Insert statements for trigger here por la siguiente instrucción:

    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 , haga clic en Analizar. Si se devuelve un mensaje de error, compare la instrucción con la información anterior y corrija según sea necesario y repita este paso.

  9. Para crear el desencadenador DML, en el menú Consulta , haga clic en Ejecutar. El desencadenador DML se crea como un objeto en 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.

Antes de comenzar

Uso de Transact-SQL

  1. En el Explorador de objetos, conéctese a una instancia del motor de base de datos y expanda esa instancia.

  2. En el menú Archivo , haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar. En este ejemplo se crea el mismo desencadenador DML almacenado que el anterior.

    -- Trigger valid for multirow and single row inserts  
    -- and optimal for single row inserts.  
    USE AdventureWorks2012;  
    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;