Condividi tramite


Creare trigger DML.

In questo argomento viene descritta la procedura per la creazione di un trigger DML Transact-SQL utilizzando SQL Server Management Studio e l'istruzione Transact-SQL CREATE TRIGGER.

Prima di iniziare

Limitazioni e restrizioni

Per un elenco di limitazioni e restrizioni associate alla creazione di trigger DML, vedere CREATE TRIGGER (Transact-SQL).

Autorizzazioni

È necessario disporre dell'autorizzazione ALTER per la tabella o la vista in cui si desidera creare il trigger.

Procedura: Creazione di un trigger DML

È possibile utilizzare uno dei seguenti elementi:

  • SQL Server Management Studio

  • Transact-SQL

Utilizzo di SQL Server Management Studio

  1. In Esplora oggetti connettersi a un'istanza del Motore di database, quindi espanderla.

  2. Espandere Database, espandere il database AdventureWorks2012 , espandere Tabelle e quindi espandere la tabella Purchasing.PurchaseOrderHeader.

  3. Fare clic con il pulsante destro del mouse su Trigger, quindi selezionare Nuovo trigger.

  4. Scegliere Imposta valori per parametri modello dal menu Query. In alternativa, è possibile premere (CTRL+MAIUSC+M) per aprire la finestra di dialogo Imposta valori per parametri modello.

  5. Nella finestra di dialogo Imposta valori per parametri modello immettere i seguenti valori per i parametri indicati.

    Parametro

    Valore

    Autore

    Your name

    Data di creazione

    Today's date

    Descrizione

    Prima di consentire un nuovo ordine di acquisto con il fornitore da inserire, viene controllata la posizione finanziaria del fornitore.

    Schema_Name

    Purchasing

    Trigger_Name

    NewPODetail2

    Table_Name

    PurchaseOrderDetail

    Data_Modification_Statement

    Consente di rimuovere UPDATE e DELETE dall'elenco.

  6. Fare clic su OK.

  7. Nell'Editor di query, sostituire il commento -- Insert statements for trigger here con la seguente istruzione:

    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. Per verificare la validità della sintassi, scegliere Analizza dal menu Query. Se viene restituito un messaggio di errore, confrontare l'istruzione con le informazioni precedenti, apportare le modifiche necessarie e ripetere il passaggio.

  9. Per creare il trigger DML, nel menu Query fare clic su Esegui. Il trigger DML viene creato come un oggetto nel database.

  10. Per visualizzare il trigger DML nell'elenco di Esplora oggetti, fare clic con il pulsante destro del mouse su Trigger e selezionare Aggiorna.

[Torna all'inizio]

Utilizzo di Transact-SQL

  1. In Esplora oggetti connettersi a un'istanza del Motore di database, quindi espanderla.

  2. Nel menu File, fare clic su Nuova query.

  3. Copiare il seguente esempio e incollarlo nella finestra Query, quindi fare clic su Esegui. In questo esempio vengono creati gli stessi trigger DML archiviati indicati in precedenza.

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

[Torna all'inizio]