Condividi tramite


Creare trigger DML

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureDatabase SQL in Microsoft Fabric

Questo articolo descrive come creare un trigger DML (Data Manipulation Language) Transact-SQL con SQL Server Management Studio o l'istruzione Transact-SQL CREATE TRIGGER .

Gli esempi di codice in questo articolo usano il database di esempio AdventureWorks2025 o AdventureWorksDW2025, che è possibile scaricare dalla home page Microsoft SQL Server Samples and Community Projects.

Limitazioni

Per un elenco delle limitazioni e delle restrizioni correlate alla creazione di trigger DML, vedere CREATE TRIGGER.

Autorizzazioni

È necessaria ALTER l'autorizzazione per la tabella o la vista in cui viene creato il trigger.

Come creare un trigger DML

È possibile usare uno dei seguenti metodi:

Uso di SQL Server Management Studio

  1. In Esplora oggetti, connettersi a un'istanza del motore di database e quindi espandere tale istanza.

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

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

  4. Nel menu Query selezionare Specifica valori per Parametri modello. 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
    Author Nome dell'utente
    Crea data 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 Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Rimuovere UPDATE e DELETE dall'elenco.
  6. Seleziona 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 che la sintassi sia valida, scegliere Analizza dal menu Query. Se viene restituito un messaggio di errore, confrontare l'istruzione con il blocco di codice precedente, correggere in base alle esigenze e ripetere questo 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.

Usare Transact-SQL

  1. In Esplora oggetti, connettersi a un'istanza del motore di database e quindi espandere tale istanza.

  2. Scegliere Nuova query dal menu File.

  3. Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. In questo esempio viene creato lo stesso trigger DML archiviato di prima. Il trigger è valido per gli inserimenti di righe singole e multirow e ottimale per gli inserimenti a riga singola.

    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;