Creare trigger DML

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Questo argomento descrive come creare un trigger DML Transact-SQL usando SQL Server Management Studio e l'istruzione TRIGGER di Transact-SQL.

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 usare uno dei seguenti elementi:

Utilizzo di SQL Server Management Studio

  1. In Esplora oggetti connettersi a un'istanza del motore di database ed espanderla.

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

  3. Fare clic con il pulsante destro del mouse su Trigger, quindi scegliere 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 Nome dell'utente
    Data di creazione Data odierna
    Descrizione Prima di consentire un nuovo ordine di acquisto con il fornitore da inserire, viene controllata la posizione finanziaria del fornitore.
    Schema_Name Acquisti
    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 querysostituire il commento -- Insert statements for trigger here con l'istruzione seguente:

    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, scegliere Esegui dal menu Query. 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 scegliere Aggiorna.

Prima di iniziare

Utilizzo di Transact-SQL

  1. In Esplora oggetti connettersi a un'istanza del motore di database ed espanderla.

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

  3. Copiare e incollare l'esempio seguente 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 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;