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ń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.