T-SQL SQL Server Wyzwalacze (ang. Triggers)

Wyzwalacze (ang. Triggers) są specjalnymi rodzajami procedur składowanych, które uruchamiają się automatycznie w wyniku zaistnienia jakiegoś zdarzenia na serwerze bazy danych. Wyzwalacze mogą służyć do różnych rzeczy np. obsługi błędów, sprawdzania poprawności danych, modyfikacji widoków itp.

W SQL Server rozróżniamy kilka typów wyzwalaczy w zależności od zdarzenia.

  • Wyzwalacze DML (od Data Manipulating Language) – chodzi tutaj o polecenia dzięki którym „manipulujemy”/zarządzamy danymi INSERT, UPDATE i DELETE. Wyzwalacze tego typu możemy zastosować na tabeli lub na widoku.
  • Wyzwalacze DDL (od Data Definiton Language) – tutaj chodzi o polecenia które służą do definiowania struktury danych CREATE, ALTER, DROP.
  • Wyzwalacze Logon – (istnieją na pewno od wersji SQL Server 2012) tutaj mamy do czynienia ze zdarzeniami Logon, kiedy użytkownik nawiązuje połączenie (sesje) z bazą danych.

Wyzwalacze rozróżniamy także w zależności od typu. W niniejszym wpisie skupimu się na Before i After:

  • Befor – trigger zostanie uruchomiony przed zdarzeniem
  • After – trigger zostanie uruchomiony po zdarzeniu

Przykład definicji prostego Triggera

Do czego służą wyzwalacze

Triggery możemy wykorzystać do bardzo wielu rzeczy, oto kilka z ich zastosowań:

  • wyzwalacze bardzo często wykorzystujemy do definiowania warunków integralności danych w tabelach
  • do kaskadowego wykonania pewnych operacji
  • są również wykorzystywane do kontroli danych
  • mogą służyć także do implementacji złożonych reguł biznesowych
  • możemy je także wykorzystać od generowania określonych wartości w tabelach
  • itp.

Przykład zastosowania Triggera na bazie AdventureWorks2008R2

Stwórzmy najprostszy Trigger jaki chyba tylko można stworzyć. Przy próbie modyfikacji danych w tabeli Person.Person za pomocą poleceń INSERT, UPDATE, DELETE ma się uruchomić trigger o nazwie TriggerInfo który wyświetli tylko komunikat „Brawo Twój pierwszy Trigger zadziałał”.

 Zgodnie z przykładową strukturą Triggera powyżej utworzyłem kod który utworzy nasz Trigger na tabeli Person.Person.

Teraz uruchamiamy nasz kod klawiszem F5 lub klikamy na przycisk „EXECUTE” !!! PAMIĘTAJ !!! że musisz być ustawiony w odpowiednim kontekście, czyli w bazie AdventureWorks2008R2. Jeżeli wszystko przebiegnie poprawnie powinniśmy uzyskać komunikat „Command(s) completed successfully”. Już w tym momencie w gałęzi Databases -> AdventureWorks2008R2 -> Tables  -> Person.Person  -> Triggers , powinien pojawić się nowy Trigger o nazwie TriggerInfo. Jeżeli go nie ma musimy kliknąć prawym przyciskiem myszy na gałęzi Triggers i z menu kontekstowego wybrać opcję Refresh.

t-sql sql server wyzwalacze triggers

Teraz sprawdzimy czy nasz trigger działa. W tym celu zmodyfikujemy jeden rekord w tabeli Person.Person i zobaczymy czy nasz trigger się uruchomi. Pamiętasz, że nasz trigger powiniem się uruchomić w przypadku zastosowania na tabeli Person.Person którejś z instrukcji INSERT, UPDATE, DELETE. My zastosujemy instrukcję UPDATE i zmodyfikujemy wiersz z osobą Ken Sanchez.

Poniżej zrzut tabeli sprzed modyfikacji.

t-sql sql server wyzwalacze triggers

Poniżej instrukcja UPDATE którą zmodyfikujemy imię z Ken na KEN, czyli zmienimy tylko rozmiar liter.

Wykonyjemy nasz kod F5 i jeżeli wszystko poszło poprawnie powinniśmy otrzymać dwa komunikaty. Jeden o tym, że zmodyfikowaliśmy jeden wiersz

(1 row(s) affected)

A drugi komunikat z naszego Triggera.

Brawo Twój pierwszy Trigger zadzialal

Co obrazuje poniższy zrzut.

t-sql sql server wyzwalacze triggers

Mamy więc pewność, że nasz Trigger działa poprawnie.

Zapraszam do kolejnych wpisów na Anonco.PL


  SQL tutorial. AdventureWorks exercises SQL SERVER