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:

  1. Po wyzwalaczach (dla wyzwalaczy)

    • PO WPROWADZENIU Wyzwalacz.
    • PO AKTUALIZACJI Wyzwalacz.
    • PO USUNIĘCIU Wyzwalacz.
  2. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow