Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database 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
In Esplora oggetti, connettersi a un'istanza del motore di database e quindi espandere tale istanza.
Espandere Database, espandere il
AdventureWorks2025database, espandere Tabelle, quindi espandere la tabellaPurchasing.PurchaseOrderHeader.Fare clic con il pulsante destro del mouse su Trigger, quindi scegliere Nuovo trigger.
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 .
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 PurchasingTrigger_Name NewPODetail2Table_Name PurchaseOrderDetailData_Modification_Statement Rimuovere UPDATEeDELETEdall'elenco.Seleziona OK.
Nell' Editor di querysostituire il commento
-- Insert statements for trigger herecon 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;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.
Per creare il trigger DML, scegliere Esegui dal menu Query. Il trigger DML viene creato come un oggetto nel database.
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
In Esplora oggetti, connettersi a un'istanza del motore di database e quindi espandere tale istanza.
Scegliere Nuova query dal menu File.
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;