Microsoft SQL Server
Spust
Szukaj…
Wprowadzenie
Wyzwalacz to specjalny rodzaj procedury składowanej, która jest wykonywana automatycznie po wystąpieniu zdarzenia. Istnieją dwa typy wyzwalaczy: wyzwalacze języka definicji danych i wyzwalacze języka manipulacji danymi.
Zwykle jest związany ze stołem i strzela automatycznie. Nie można jawnie wywołać żadnego wyzwalacza.
Rodzaje i klasyfikacje wyzwalacza
W SQL Server istnieją dwie kategorie wyzwalaczy: wyzwalacze DDL i wyzwalacze DML.
Wyzwalacze DDL są uruchamiane w odpowiedzi na zdarzenia DDL (Data Definition Language). Te zdarzenia odpowiadają przede wszystkim instrukcjom języka Transact-SQL rozpoczynającym się od słów kluczowych CREATE
, ALTER
i DROP
.
Wyzwalacze DML są uruchamiane w odpowiedzi na zdarzenia DML (Data Manipulation Language). Te zdarzenia odpowiadają instrukcjom języka Transact-SQL rozpoczynającym się od słów kluczowych INSERT
, UPDATE
i DELETE
.
Wyzwalacze DML są podzielone na dwa główne typy:
Po wyzwalaczach (dla wyzwalaczy)
- PO WPROWADZENIU Wyzwalacz.
- PO AKTUALIZACJI Wyzwalacz.
- PO USUNIĘCIU Wyzwalacz.
Zamiast wyzwalaczy
- ZAMIAST WSTAWIENIA Wyzwalacz.
- ZAMIAST AKTUALIZACJI Wyzwalacz.
- ZAMIAST USUŃ Spust.
Wyzwalacze DML
Wyzwalacze DML są uruchamiane w odpowiedzi na instrukcje dml ( insert
, update
lub delete
).
Wyzwalacz dml można utworzyć, aby rozwiązać jedno lub więcej zdarzeń dml dla pojedynczej tabeli lub widoku. Oznacza to, że pojedynczy wyzwalacz dml może obsłużyć wstawianie, aktualizowanie i usuwanie rekordów z określonej tabeli lub widoku, ale może obsłużyć tylko dane zmieniane w tej pojedynczej tabeli lub widoku.
Wyzwalacze DML zapewniają dostęp do inserted
i deleted
tabel zawierających informacje o danych, na które wpłynęły / będą wpływać instrukcje wstawiania, aktualizowania lub usuwania, które uruchomiły wyzwalacz.
Zauważ, że wyzwalacze DML są oparte na instrukcjach, a nie na wierszach. Oznacza to, że jeśli instrukcja dotyczy więcej niż jednego wiersza, wstawione lub usunięte tabele będą zawierać więcej niż jeden wiersz.
Przykłady:
CREATE TRIGGER tblSomething_InsertOrUpdate ON tblSomething
FOR INSERT
AS
INSERT INTO tblAudit (TableName, RecordId, Action)
SELECT 'tblSomething', Id, 'Inserted'
FROM Inserted
GO
CREATE TRIGGER tblSomething_InsertOrUpdate ON tblSomething
FOR UPDATE
AS
INSERT INTO tblAudit (TableName, RecordId, Action)
SELECT 'tblSomething', Id, 'Updated'
FROM Inserted
GO
CREATE TRIGGER tblSomething_InsertOrUpdate ON tblSomething
FOR DELETE
AS
INSERT INTO tblAudit (TableName, RecordId, Action)
SELECT 'tblSomething', Id, 'Deleted'
FROM Deleted
GO
Wszystkie powyższe przykłady dodają rekordy do tblAudit za każdym razem, gdy rekord zostanie dodany, usunięty lub zaktualizowany w tblSomething.