WYZWALACZE: TRIGGERS

Kursy Online SQL Server Bazy Danych Microsotf Wyzwalacze Triggers Andrzej Śmigielski

WYZWALACZ (TRIGGER)

 
          Jest to nietypowy – z perspektywy uruchamiania – rodzaj procedury składowanej, która jest inicjowana automatycznie po określonym przez TRIGGER zdarzeniu na serwerze bazy danych.
 
 

WYZWALACZE (TRIGGERS) DZIELĄ SIĘ NA KILKA GRUP:

 
● Wyzwalacze DML (Data Manipulation Language – język manipulowania danymi) są wykonywane w momencie, gdy użytkownik próbuje wykonać operacje na danych dotyczących tabeli lub widoku za pośrednictwem instrukcji należących do tej grupy używalności języka SQL, czyli:
– INSERT
– UPDATE
– DELETE
● Wyzwalacze DDL (Data Definition Language – język definiowania danych) są wykonywane w momencie, gdy użytkownik próbuje wykonać operacje bezpośrednio na obiektach bazodanowych za pośrednictwem instrukcji należących do tej grupy używalności języka SQL, czyli:
– CREATE
– ALTER
– DROP
● Wyzwalacze logowania są wykonywane w momencie, gdy użytkownik próbuje się zalogować podczas nawiązywania sesji za pośrednictwem instrukcji logowania, czyli:
– LOGON
 
 

WŁAŚCIWOŚCI WYZWALACZY:

 
Dla każdej instrukcji dotyczącej tych samych danych oraz tych samych obiektów jak i logowań można utworzyć kilka wyzwalaczy działających niezależnie między sobą.
Wyzwalacze DML korzystają z tabel logicznych, tak zwanych koncepcyjnych, czyli DELETED oraz INSERTED zawierających stare oraz nowe wartości wierszy.
Wyzwalacze nie powinny zwracać żadnych wartości, powinny natomiast sprawdzać oraz modyfikować dane w oparciu o instrukcje modyfikowania jak i definiowania danych.
Często wykorzystywane są do logowania zmian zachodzących w bazie danych, czyli:
– kto dokonał zmiany
– kiedy zmiana miała miejsce
– z czego na co nastąpiła zmiana
 

Wyzwalacze (TRIGGERS) – dostępne opcje:

ALL SERVER Pozwala ograniczyć zasięg działania wyzwalacza DDL lub wyzwalacza logowania do bieżącego serwera. Wyzwalacz „reaguje” na zdarzenia o właściwościach event_type oraz event_group dotyczące bieżącego serwera.
DATABASE Pozwala ograniczyć zasięg działania wyzwalacza DDL do bieżącej bazy danych. Wyzwalacz „reaguje” na zdarzenia o właściwościach event_type oraz event_group dotyczące bieżącej bazy danych.
DELETE
INSERT
UPDATE
Określa instrukcje aktywujące wyzwalacz DML w odniesieniu do tabeli lub widoku.
Musi być określona co najmniej jedna z tych opcji, jednak definicja wyzwalacza może zawierać dowolną kombinację tych opcji w dowolnej kolejności. W przypadku wyzwalaczy INSTEAD OF (zamiast) opcja DELETE jest niedozwolona dla tabel, które mają relacje odwołań z operacją kaskadową ON DELETE. Analogicznie opcja UPDATE jest niedozwolona dla tabel, które mają relacje odwołań zawierające operację kaskadową ON UPDATE.
EXECUTE AS Pozwala na określenie kontekstu zabezpieczeń, w którym ma być uruchomiony wyzwalacz.
FOR
AFTER
Opcja AFTER określa, że wyzwalacz DML będzie inicjowany dopiero po pomyślnym wykonaniu wszystkich operacji wskazanych w wyzwalającej instrukcji SQL. Ponadto wcześniej muszą zostać pomyślnie sfinalizowane wszystkie kaskadowe operacje odwołań i kontrole ograniczeń. Opcja AFTER jest domyślna, jeśli ze słów kluczowych podano jedynie FOR. Wyzwalaczy z opcją AFTER nie można tworzyć dla widoków.
INSTEAD OF Określa, że wyzwalacz DML jest wykonywany zamiast wyzwalającej instrukcji SQL, dlatego jest nadrzędną akcją dla wyzwalanej instrukcji. Opcja ta nie może być określona dla poleceń DDL ani wyzwalaczy logowania.
Można zdefiniować maksymalnie jeden wyzwalacz INSTEAD OF dla każdej instrukcji INSERT, UPDATE lub DELETE dotyczącej tabeli lub widoku. Można jednak dla widoków tworzyć widoki zawierające swoje własne wyzwalacze INSTEAD OF.
Wyzwalaczy INSTEAD OF nie można stosować do aktualizowalnych widoków zawierających klauzulę WITH CHECK OPTION. Dodanie wyzwalacza do takiego widoku spowoduje wygenerowanie komunikatu o błędzie. Przed zdefiniowaniem wyzwalacza tego typu użytkownik musi usunąć tę opcję za pomocą instrukcji ALTER VIEW.
NOT FOR REPLICATION Wskazuje, że wyzwalacz nie powinien być inicjowany, jeśli agent replikacji modyfikuje tabelę używaną w wyzwalaczu.
SCHEMA_NAME Nazwa schematu, do którego należy wyzwalacz DML. Zasięg działania wyzwalaczy DML ogranicza się do schematu tabeli lub do widoku, dla którego je utworzono. Schematu schema_name nie można wskazać dla wyzwalaczy DDL ani wyzwalaczy logowania.
SQL_STATEMENT Pozwala określić warunki i operacje wyzwalacza. Warunki wyzwalacza określają dodatkowe kryteria decydujące o tym, czy próbowane zdarzenia języków DML i DDL oraz logowania mają powodować wykonanie operacji zdefiniowanych w wyzwalaczu.
TABLE
VIEW
Określa tabelę lub widok, na którym jest wykonywany wyzwalacz DML. Podanie w pełni kwalifikowanej nazwy tabeli jest opcjonalne. Do widoku może się odwoływać wyłącznie wyzwalacz INSTEAD OF. Wyzwalaczy DML nie można definiować dla lokalnych ani globalnych tabel tymczasowych.
TRIGGER_NAME Nazwa wyzwalacza, która musi być zgodna z regułami dotyczącymi identyfikatorów. Jedyna różnica polega na tym, że parametr trigger_name nie może się rozpoczynać znakiem # ani ##.
WITH ENCRYPTION Powoduje „rozmazanie, zaciemnienie” kodu CREATE TRIGGER. Opcja ta zapobiega publikowaniu wyzwalacza w ramach replikacji w programie SQL Server. Nie można jej stosować do wyzwalaczy aparatu CLR.

 
 

PLIKI DO ŚCIĄGNIĘCIA:

1. 010_Wyzwalacze_Triggger.sql
 

KURSY SQL ONLINE