Creare trigger DML.Create DML Triggers

Questo argomento illustra come creare un trigger DML Transact-SQLTransact-SQL usando SQL Server Management StudioSQL Server Management Studio e l'istruzione Transact-SQLTransact-SQL CREATE TRIGGER.This topic describes how to create a Transact-SQLTransact-SQL DML trigger by using SQL Server Management StudioSQL Server Management Studio and by using the Transact-SQLTransact-SQL CREATE TRIGGER statement.

Prima di iniziare Before You Begin

Limitazioni e restrizioniLimitations and Restrictions

Per un elenco di limitazioni e restrizioni associate alla creazione di trigger DML, vedere CREATE TRIGGER (Transact-SQL).For a list of limitations and restrictions related to creating DML triggers, see CREATE TRIGGER (Transact-SQL).

Autorizzazioni Permissions

È necessario disporre dell'autorizzazione ALTER per la tabella o la vista in cui si desidera creare il trigger.Requires ALTER permission on the table or view on which the trigger is being created.

Procedura: Creazione di un trigger DML How to Create a DML Trigger

È possibile usare uno dei seguenti elementi:You can use one of the following:

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

  1. In Esplora oggetticonnettersi a un'istanza del Motore di databaseDatabase Engine , quindi espanderla.In Object Explorer, connect to an instance of Motore di databaseDatabase Engine and then expand that instance.

  2. Espandere Database, espandere il database AdventureWorks2012AdventureWorks2012 , espandere Tabelle e quindi espandere la tabella Purchasing.PurchaseOrderHeader.Expand Databases, expand the AdventureWorks2012AdventureWorks2012 database, expand Tables and then expand the table Purchasing.PurchaseOrderHeader.

  3. Fare clic con il pulsante destro del mouse su Trigger, quindi scegliere Nuovo trigger.Right-click Triggers, and then select New Trigger.

  4. Scegliere Imposta valori per parametri modello dal menu Query.On the Query menu, click Specify Values for Template Parameters. In alternativa, è possibile premere (CTRL+MAIUSC+M) per aprire la finestra di dialogo Imposta valori per parametri modello .Alternatively, you can press (Ctrl-Shift-M) to open the Specify Values for Template Parameters dialog box.

  5. Nella finestra di dialogo Imposta valori per parametri modello immettere i seguenti valori per i parametri indicati.In the Specify Values for Template Parameters dialog box, enter the following values for the parameters shown.

    ParametroParameter ValoreValue
    AutoreAuthor Nome dell'utenteYour name
    Data di creazioneCreate Date Data correnteToday's date
    DescrizioneDescription Prima di consentire un nuovo ordine di acquisto con il fornitore da inserire, viene controllata la posizione finanziaria del fornitore.Checks the vendor credit rating before allowing a new purchase order with the vendor to be inserted.
    Schema_NameSchema_Name PurchasingPurchasing
    Trigger_NameTrigger_Name NewPODetail2NewPODetail2
    Table_NameTable_Name PurchaseOrderDetailPurchaseOrderDetail
    Data_Modification_StatementData_Modification_Statement Consente di rimuovere UPDATE e DELETE dall'elenco.Remove UPDATE and DELETE from the list.
  6. Scegliere OK.Click OK.

  7. Nell' Editor di querysostituire il commento -- Insert statements for trigger here con l'istruzione seguente:In the Query Editor, replace the comment -- Insert statements for trigger here with the following statement:

    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.To verify the syntax is valid, on the Query menu, click Parse. Se viene restituito un messaggio di errore, confrontare l'istruzione con le informazioni precedenti, apportare le modifiche necessarie e ripetere il passaggio.If an error message is returned, compare the statement with the information above and correct as needed and repeat this step.

  9. Per creare il trigger DML, scegliere Esegui dal menu Query.To create the DML trigger, from the Query menu, click Execute. Il trigger DML viene creato come un oggetto nel database.The DML trigger is created as an object in the 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.To see the DML trigger listed in Object Explorer, right-click Triggers and select Refresh.

    Prima di iniziareBefore You Begin

Utilizzo di Transact-SQL Using Transact-SQL

  1. In Esplora oggetticonnettersi a un'istanza del Motore di databaseDatabase Engine , quindi espanderla.In Object Explorer, connect to an instance of Motore di databaseDatabase Engine and then expand that instance.

  2. Nel menu File , fare clic su Nuova query.From the File menu, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute. In questo esempio vengono creati gli stessi trigger DML archiviati indicati in precedenza.This example creates the same stored DML trigger as above.

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

Prima di iniziare Before You Begin