Zaprojektowanie Wyzwalacze DDL
Przed rozpoczęciem projektowania wyzwalacz DLL, wymagane jest następujące:
Należy zrozumieć zakres wyzwalacz DLL.
Należy określić, które Transact-SQL fires instrukcja, lub grupa instrukcja, wyzwalacza.
Uwaga dotycząca zabezpieczeń |
---|
Złośliwy kod wewnątrz Wyzwalacze mogą być uruchamiane uprawnienia escalated.Aby uzyskać więcej informacji na temat zmniejszyć to zagrożenie, zobacz Zarządzanie zabezpieczeniami wyzwalacza. |
Ostrzeżenie
Wyzwalacze DDL nie uruchamiaj w odpowiedzi na zdarzenia, które wpływają na lokalnej lub globalnej tabel tymczasowych i procedur przechowywanych.
Opis zakresu wyzwalacza
Wyzwalacze DDL można ognia w odpowiedzi na Transact-SQL zdarzenie przetwarzane w bieżącej bazie danych lub na bieżącym serwerze.Zdarzenie zależy od zakres wyzwalacza.Na przykład wyzwalacz DLL utworzone w odpowiedzi na zdarzenie CREATE_TABLE zrobić przy każdym wystąpieniu zdarzenia CREATE_TABLE w bazie danych lub na wystąpienie serwera.wyzwalacz DLL utworzone w odpowiedzi na zdarzenie CREATE_LOGIN można wykonać tylko gdy zdarzenie CREATE_LOGIN występuje na serwerze.
W poniższym przykładzie wyzwalacz DLL safety zostanie zastosowana przy każdym DROP_TABLE lub ALTER_TABLE zdarzenie w bazie danych.
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK
;
W poniższym przykładzie wyzwalacz DLL drukuje komunikat ewentualne CREATE_DATABASE zdarzenie na bieżące wystąpienie serwera.W przykładzie użyto EVENTDATA funkcja pobrać tekstu odpowiednich Transact-SQL instrukcja.For more information about how to use EVENTDATA with DDL triggers, see Funkcja EVENTDATA.
IF EXISTS (SELECT * FROM sys.server_triggers
WHERE name = 'ddl_trig_database')
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
CREATE TRIGGER ddl_trig_database
ON ALL SERVER
FOR CREATE_DATABASE
AS
PRINT 'Database Created.'
SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
GO
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
List, które mapują Transact-SQL instrukcje do zakresów, które mogą być określone dla nich są dostępne za pośrednictwem łączy dostępnych w sekcji "wybranie określonego DDL instrukcji do ognia DDL wyzwalacza," w dalszej części tego tematu.
Wyzwalacze DDL zakresu bazy danych są przechowywane jako obiekty w bazie danych, w którym zostały utworzone.Wyzwalacze DDL mogą być tworzone w wzorca bazy danych i zachowują się podobnie jak utworzonych w bazach danych zaprojektowanych przez użytkownika.Informacje o Wyzwalacze DDL można uzyskać przez badanie sys.triggers wykazu widoku.Kwerendy można sys.triggers w kontekście bazy danych, w którym wyzwalacze są tworzone lub przez określenie nazwy bazy danych jako identyfikator, takich jak master.sys.triggers.
Wyzwalacze DDL zakresu serwera są przechowywane jako obiekty w wzorca bazy danych.Jednakże można uzyskać informacje dotyczące zakresu serwera Wyzwalacze DDL przez badanie sys.server_triggers widok w dowolnym kontekście bazy danych katalogu.
Aby uzyskać więcej informacji dotyczących sposobu pobierania metadane dla Wyzwalacze DDL, zobacz Pobieranie informacji O Wyzwalacze DDL.
Określanie instrukcji Transact-SQL lub grupa instrukcji
Wyzwalacze DDL mogą być tworzone na ogień w odpowiedzi, w szczególności jedną lub więcej instrukcji DDL lub wstępnie zdefiniowanej grupy instrukcji DDL.
Wybranie określonego instrukcji DDL na ogień wyzwalacza DDL
Wyzwalacze DDL można zaprojektować ognia po szczególności jednego lub więcej Transact-SQL instrukcje są Uruchom.W poprzednim przykładzie wyzwolenia safety fires po dowolnym DROP_TABLE lub ALTER_TABLE zdarzenie.Lista Transact-SQL instrukcji, które można określić na ogień wyzwalacz DLL i zakres, w którym wyzwalacza można ognia, zobacz Zdarzenia DDL.
Wybranie wstępnie zdefiniowane grupy instrukcji DDL na ogień wyzwalacza DDL
wyzwalacz DLL można ognia po wykonaniu każdej Transact-SQL zdarzenie, należy wstępnie zdefiniowany sposób grupowanie podobnych zdarzeń.Na przykład wyzwalacz DLL ognia po uruchomieniu dowolnego instrukcja CREATE TABLE, ALTER TABLE lub DROP TABLE, należy w rachunku tworzenia WYZWALACZA można określić dla DDL_TABLE_EVENTS.Po uruchomieniu WYZWALACZA utworzyć zdarzenies, które są objęte zdarzenie grupy są dodawane do sys.trigger_zdarzenies wykazu widoku.
Ostrzeżenie
W SQL Server 2005, jeśli wyzwalacz jest tworzony na grupę zdarzenie sys.trigger_events nie zawiera informacji o grupie zdarzenie sys.trigger_events zawiera informacje tylko o poszczególnych zdarzeń objętych tą grupą.W SQL Server 2008, sys.trigger_zdarzenies będzie się powtarzał metadane o zdarzenie grupy na tworzony jest wyzwalacze i o osobie zdarzenies, zdarzenie grupy obejmuje.Zmienia więc zdarzenie, które są objęte grup zdarzeń w SQL Server 2008 nie dotyczą Wyzwalacze DDL, które są tworzone na tych grup zdarzeń w SQL Server 2005.
Listę wstępnie zdefiniowanych grup instrukcji DDL, które są dostępne dla Wyzwalacze DDL oświadczenia określonego zdarzenie grupy tytułowych i zakresy, w których można zaprogramować tych grup zdarzeń, zobacz Grupy zdarzeń DDL.