Tworzenie wyzwalaczy DML
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
W tym temacie opisano sposób tworzenia wyzwalacza DML Transact-SQL przy użyciu programu SQL Server Management Studio oraz instrukcji CREATE TRIGGER Transact-SQL.
Przed rozpoczęciem
Ograniczenia i ograniczenia
Aby uzyskać listę ograniczeń i restrykcji związanych z tworzeniem wyzwalaczy DML, zapoznaj się z CREATE TRIGGER (Transact-SQL).
Uprawnienia
Wymaga uprawnienia ALTER w tabeli lub widoku, w którym jest tworzony wyzwalacz.
Jak utworzyć wyzwalacz DML
Możesz użyć jednej z następujących opcji:
Korzystanie z programu SQL Server Management Studio
W Eksploratorze obiektów połącz się z instancją Silnika bazy danych, a następnie rozwiń tę instancję.
Rozwiń Databases, rozwiń bazę danych
AdventureWorks2022
, rozwiń Tabele, a następnie rozwiń tabelę Purchasing.PurchaseOrderHeader.Kliknij prawym przyciskiem myszy Wyzwalacze, a następnie wybierz Nowy Wyzwalacz.
Na menu Zapytanie kliknij pozycję Określ Wartości Parametrów Szablonu. Alternatywnie możesz nacisnąć (Ctrl-Shift-M), aby otworzyć okno dialogowe Określanie wartości parametrów szablonu.
W oknie dialogowym Określ wartości parametrów szablonu wprowadź następujące wartości dla wyświetlanych parametrów.
Parametr Wartość Autor Twoja nazwa Data utworzenia Dzisiejsza data Opis Sprawdza ocenę kredytową dostawcy przed zezwoleniem na wstawienie nowego zamówienia zakupu z dostawcą. Schema_Name Zakup Nazwa_Wyzwalacza NewPODetail2 Nazwa_Tabeli Szczegóły Zamówienia Zakupu Instrukcja_Modyfikacji_Danych Usuń polecenie UPDATE i DELETE z listy. Kliknij przycisk OK.
W edytorze zapytań zastąp komentarz
-- Insert statements for trigger here
następującą instrukcją: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;
Aby sprawdzić, czy składnia jest prawidłowa, w menu zapytania kliknij pozycję Przeanalizuj. Jeśli zostanie zwrócony komunikat o błędzie, porównaj wyrażenie z powyższymi informacjami, popraw je w miarę potrzeb i powtórz ten krok.
Aby utworzyć wyzwalacz DML, w menu Zapytanie kliknij pozycję Wykonaj. Wyzwalacz DML jest tworzony jako obiekt w bazie danych.
Aby wyświetlić wyzwalacz DML wymieniony w Eksploratorze obiektów, kliknij prawym przyciskiem myszy Wyzwalacze i wybierz pozycję Odśwież.
Korzystanie z Transact-SQL
W Eksploratorze obiektówpołącz się z instancją Silnika bazy danych, a następnie rozwiń tę instancję.
W menu plik kliknij pozycję Nowe zapytanie.
Skopiuj i wklej poniższy przykład w oknie zapytania, a następnie kliknij pozycję Wykonaj. W tym przykładzie jest tworzony ten sam przechowywany wyzwalacz DML, co powyżej.
-- 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;