Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Widok sys.triggers

Termin Definicja
Widok sys.triggers

sys.triggers zwraca listę wyzwalaczy zdefiniowanych dla tabel i widoków w bazie.

Zawartość widoku systemowego

sys.triggers to widok katalogu systemowego SQL Server zwracający po jednym wierszu dla każdego wyzwalacza DML przypisanego do tabeli lub widoku oraz dla wyzwalaczy DDL o zasięgu bazy danych. Najważniejsze kolumny to name z nazwą obiektu, object_id, parent_id wskazujące obiekt macierzysty, type z wartością TR dla wyzwalaczy T-SQL i TA dla tych opartych o CLR, oraz zestaw flag: is_disabled, is_instead_of_trigger i is_ms_shipped. Widok działa w kontekście bieżącej bazy, więc zapytanie trzeba wykonać po przełączeniu się na właściwą bazę poleceniem USE.

Samą treść wyzwalacza pobiera się osobno, funkcją OBJECT_DEFINITION z podanym object_id albo z widoku sys.sql_modules, gdzie tekst leży w kolumnie definition.

Jak to się łączy z innymi widokami

W praktyce sys.triggers rzadko używa się samodzielnie. Złączenie z sys.tables po parent_id daje czytelną listę wyzwalaczy z nazwami tabel, a dołożenie sys.trigger_events pokazuje, na jakie zdarzenia wyzwalacz reaguje: INSERT, UPDATE czy DELETE. Wyzwalacze DDL o zasięgu serwera nie znajdą się tu w ogóle, bo mieszkają w sys.server_triggers. Starszy widok zgodności sys.sysobjects z filtrem po typie TR pokazuje częściowo te same dane, ale nie należy na nim budować nowych rozwiązań.

Różnica między wyzwalaczem AFTER a INSTEAD OF ma znaczenie diagnostyczne: ten drugi zastępuje operację, więc zapis, który wygląda na wykonany, może w rzeczywistości trafić gdzie indziej albo nigdzie.

Dlaczego wyzwalacze bywają źródłem kłopotów

Typowa sytuacja w bazach programów handlowych: operacja zapisu dokumentu trwa kilkanaście sekund, choć tabela nie jest duża. Przyczyną bywa wyzwalacz wykonujący dodatkowe zapytania dla każdej operacji albo, co gorsza, napisany z założeniem pojedynczego wiersza, podczas gdy tabele inserted i deleted zawierają komplet zmienianych rekordów. Drugi klasyk to wyzwalacz wyłączony kiedyś na czas importu i nigdy nie włączony z powrotem, przez co dane przestały się propagować; wykrywa się to właśnie kolumną is_disabled. Trzeci to rekurencja i zagnieżdżanie, ograniczone ustawieniami bazy, kończące się komunikatem o przekroczeniu maksymalnego poziomu zagnieżdżenia.

Warto też sprawdzać, czy wyzwalacz nie tłumi błędów, bo taki kod potrafi po cichu gubić zapisy.

Bazy programów handlowych pod opieką

Wdrażamy i serwisujemy oprogramowanie handlowe oparte o SQL Server, w tym Subiekta, WAPRO i Comarch, więc zaglądanie do katalogu systemowego przy diagnozie spowolnień jest naszą rutyną. Odzyskujemy też bazy po awariach: niepodpięte pliki MDF, przerwane odtwarzanie kopii, uszkodzenia po nagłym zaniku zasilania serwera. Ustawiamy harmonogramy kopii zapasowych tak, aby dawały punkt odtworzenia liczony w minutach, a nie w dniach. Dyżurujemy przez całą dobę, siedem dni w tygodniu, bo baza sprzedażowa nie może czekać do poniedziałku.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę