Udostępnij za pośrednictwem


Zmienianie WYZWALACZA (Transact-SQL)

Modyfikuje definicji DML, DDLlub logowania wyzwalacz, który został wcześniej utworzony przez utworzyć WYZWALACZ instrukcja.Wyzwalacze są tworzone za pomocą tworzenia WYZWALACZA.Mogą być tworzone bezpośrednio z Transact-SQL sprawozdania lub od metod zespoły, które są tworzone w Microsoft .NET Framework plików wykonywalnych języka wspólnego (CLR) i przekazać do wystąpienie SQL Server.Aby uzyskać więcej informacji na temat parametrów, które są używane w zmienić WYZWALACZ instrukcja, zobacz CREATE TRIGGER (Transact-SQL).

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
ALTER TRIGGER schema_name.trigger_name 
ON ( table | view ) 
[ WITH <dml_trigger_option> [ ,...n ] ]
(FOR | AFTER | INSTEAD OF ) 
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } 
[ NOT FOR REPLICATION ] 
AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME <method specifier> [ ; ] } 

<dml_trigger_option> ::=
    [ ENCRYPTION ]
    [ <EXECUTE AS Clause> ]

<method_specifier> ::=
    assembly_name.class_name.method_name

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE statement (DDL Trigger)

ALTER TRIGGER trigger_name 
ON { DATABASE | ALL SERVER } 
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type [ ,...n ] | event_group } 
AS { sql_statement [ ; ] | EXTERNAL NAME <method specifier> 
[ ; ] }
} 

<ddl_trigger_option> ::=
    [ ENCRYPTION ]
    [ <EXECUTE AS Clause> ]

<method_specifier> ::=
    assembly_name.class_name.method_name

Trigger on a LOGON event (Logon Trigger)
ALTER TRIGGER trigger_name 
ON ALL SERVER 
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR| AFTER } LOGON 
AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier >  [ ; ] }

<logon_trigger_option> ::=
    [ ENCRYPTION ]
    [ EXECUTE AS Clause ]

<method_specifier> ::=
    assembly_name.class_name.method_name

Argumenty

  • schema_name
    Jest to nazwa schematu, do której należy dany wyzwalacz DML .WyzwalaczeDML są obejmuje zasięgiem schematu tabela lub widoku, na którym są tworzone.schema_namejest opcjonalny, tylko wtedy, gdy wyzwalacz DML i jego odpowiedniej tabela lub widoku należą do domyślnego schematu.schema_namenie można określić dla Wyzwalacze DDL lub logowania.

  • trigger_name
    Jest istniejącego wyzwalacza, aby zmodyfikować.

  • table | view
    Jest tabela lub widok wykonaniu wyzwalacza DML .Określanie w pełni kwalifikowaną nazwę tabela lub widoku jest opcjonalne.

  • BAZY DANYCH
    Dotyczy zakres wyzwalacza DDL bieżącej bazy danych.Jeśli określony, wyzwalacz przy każdym fires event_type lub event_group występuje w bieżącej bazie danych.

  • WSZYSTKIE SERWERA
    Stosuje się zakres wyzwalacza DDL lub logowania do bieżącego serwera.Jeśli określony, wyzwalacz przy każdym fires event_type lub event_group występuje w dowolnym miejscu bieżącego serwera.

  • Z SZYFROWANIEM
    Szyfruje sys.syscomments sys.sql_modules wpisów zawierających tekst ZMIENIA WYZWALACZ instrukcja.Korzystanie z szyfrowania uniemożliwia wyzwalacz publikowana jako część SQL Server replikacja.Nie można określić Z SZYFROWANIEM wyzwalaczy CLR.

    Ostrzeżenie

    Jeśli wyzwalacz jest tworzona za pomocą szyfrowania Z, muszą być określone ponownie w zmienić WYZWALACZ instrukcja dla tej opcji pozostaną włączone.

  • WYKONANIE JAKO
    Określa kontekst zabezpieczeń, w ramach którego wyzwalacz jest wykonywany.Umożliwia sterowanie konta użytkownika wystąpienie SQL Server używa do sprawdzania poprawności uprawnień obiektom bazy danych, które odwołują się wyzwalacza.

    Aby uzyskać więcej informacji, zobacz WYKONANIE klauzuli (Transact-SQL).

  • PO
    Określa, że wyzwalacz jest uruchamiany tylko po wyzwalającegoinstrukcja SQLzostanie wykonana pomyślnie. Wszystkie akcje więzów kaskadowo i ograniczenia kontroli również musi zostały pomyślnie przed fires tego wyzwalacza.

    Po jest ustawieniem domyślnym, jeśli tylko określony dla słowa kluczowego.

    DML po wyzwalaczy może być określona tylko na tabele.

  • ZAMIAST
    Określa, że wyzwalacz DML jest wykonywany zamiast wyzwalającego SQL instrukcjaw związku z tym, przesłanianie akcje wyzwalającego sprawozdania.Zamiast tego nie można określić z wyzwalaczy DDL lub logowania.

    Co najwyżej jedną zamiast wyzwalacza seryjnego na INSERT, UPDATE lub DELETE instrukcja mogą być zdefiniowane w tabela lub widoku.Można jednak definiować widoki na widokach, gdzie każdy widok ma swój własny zamiast wyzwalacza.

    INSTEAD OF wyzwalacze nie są dozwolone na widoki utworzone za pomocą z opcji sprawdzania.SQL Serverzgłasza błąd podczas dodawania do widoku, dla którego określono z opcji Sprawdź wyzwalacza INSTEAD OF.Użytkownik musi usunąć tę opcję za pomocą ALTER VIEW przed zdefiniowaniem wyzwalacza INSTEAD OF.

  • { [DELETE] , ] [INSERT] , ] [AKTUALIZACJI]} | {[WSTAW] , [aktualizacji]}
    Określa sprawozdania modyfikacji danych, gdy próbował przeciwko tej tabela lub wyświetlić, wyzwalacz DML .Należy określić co najmniej jedną opcję.Dowolna kombinacja w dowolnej kolejności jest dozwolony w definicji wyzwalacza.Jeżeli określono więcej niż jedną opcję oddzielić przecinkami opcji.

    Aby zamiast wyzwalaczy, opcji usuwania nie jest dozwolona na tabele, które mają relacji więzy Określanie Kaskadowo akcja na usuwanie.Podobnie opcja aktualizacji nie jest dozwolona na tabele, które mają relacji więzy Określanie Kaskadowo akcja na AKTUALIZACJĘ.Aby uzyskać więcej informacji, zobacz ALTER TABLE (Transact-SQL).

  • event_type
    Jest to nazwa Transact-SQL języka zdarzenie , która po wykonaniu, powoduje wyzwalacz DDL pożaru.Zdarzenia ważne dla Wyzwalacze DDL są wymienione w Zdarzenia DDL.

  • event_group
    Jest nazwą wstępnie grupowanie Transact-SQL zdarzenia języka.Wyzwalacz DDL fires po wykonaniu każdej Transact-SQL języka zdarzenie , który należy do event_group.Ważne zdarzenie grup Wyzwalacze DDL są wymienione w Grupy zdarzeń DDL.Po zakończeniu zmienić WYZWALACZ, event_group działa również jako makra dodając typy zdarzenie , które on obejmuje do sys.trigger_events wykazu widoku.

  • NIE DLA REPLIKACJI
    Wskazuje, że wyzwalacz nie powinna być uruchamiana, gdy agent replikacja modyfikuje tabela zaangażowaną w wyzwalacza.Aby uzyskać więcej informacji, zobacz Kontrolowanie ograniczenia, tożsamości i wyzwalaczy z nie dla replikacji.

  • sql_statement
    Jest wyzwalacz warunków i akcji.

  • <method_specifier>
    Określa metoda wirtualny plik dziennika powiązać z wyzwalaczem.metoda musi mieć nie argumentów i zwrot void.class_namemusi być prawidłową SQL Server identyfikatora i musi istnieć jako klasa w wirtualny plik dziennika z wirtualny plik dziennika widoczność.Klasa nie może być zagnieżdżone klasy.

Uwagi

Aby uzyskać więcej informacji na temat WYZWALACZ ZMIENIA patrz uwagi w CREATE TRIGGER (Transact-SQL).

WyzwalaczeDML

WYZWALACZ ZMIENIA obsługuje widoki ręcznie mogą być aktualizowane przez zamiast wyzwalaczy na tabele i widoki.SQL Serverstosuje się zmienić WYZWALACZ ten sam sposób dla wszystkich rodzajów Wyzwalacze (po INSTEAD-Z).

Pierwszy i ostatni po Wyzwalacze wykonywane na tabela można określić za pomocą sp_settriggerorder.Tylko jeden pierwszy i jedna ostatnia po wyzwalacza można określić w tabela.Istnieją inne wyzwalaczy po na tej samej tabelasą losowo wykonywane.

Jeśli WYZWALACZ ZMIENIA instrukcja zmienia wyzwalacza pierwszego lub ostatniego, pierwszego lub ostatniego atrybut zestaw na zmodyfikowanego wyzwalacza jest przenoszony i wartość zamówienia należy zresetować za pomocą sp_settriggerorder.

Wyzwalacz po jest wykonywane tylko wtedy, gdy wyzwalającegoinstrukcja SQLzostała wykonana pomyślnie. To pomyślne wykonanie obejmuje wszystkie akcje więzów kaskadowo i ograniczenia kontroli skojarzone z obiektem zaktualizowany lub usunięty.Kontrole po wyzwalacz operacji dla efektów wyzwalającego instrukcja , a także wszystkich więzów kaskadowo AKTUALIZOWAĆ i usuwać akcje, które są powodowane przez wyzwalającego instrukcja.

Podczas usuwania akcja podrzędność lub odwołujący się tabela jest wynikiem KASKADOWO na usunięcie z tabelanadrzędnej i wyzwalacza INSTEAD OF na usuwanie jest zdefiniowana wtabela podrzędność, wyzwalacz jest ignorowany i Usuń akcja jest wykonywana.

WyzwalaczeDDL

W odróżnieniu od DML wyzwalaczy Wyzwalacze DDL nie jest objęty zakresem do schematów.W związku z tym OBJECT_ID, nazwa_obiektu, OBJECTPROPERTY i OBJECTPROPERTY(EX) nie można używać podczas badania metadane dotyczące Wyzwalacze DDL .W zamian za pomocą widoki wykazu .Aby uzyskać więcej informacji, zobacz Pobieranie informacji O Wyzwalacze DDL.

Uprawnienia

Zmieniać DML wyzwalacza wymaga ZMIEŃ uprawnienia w tabela lub widoku zdefiniowano wyzwalacza.

Zmiana DDL wyzwalacza zdefiniowane przy użyciu serwera zakres (na wszystkich SERVER) lub wyzwalacza logowania wymaga uprawnień sterowania serwera na serwerze.Do zmiany DDL wyzwalacza zdefiniowane przy użyciu bazy danych zakres (na bazie danych) wymaga uprawnienia ALTER DATABASE dowolnego DDL WYZWALACZA w bieżącej bazie danych.

Przykłady

Poniższy przykład tworzy wyzwalacza DML , który drukuje zdefiniowane przez użytkownika wiadomości do klient , gdy użytkownik próbuje dodać lub zmienić danych w SalesPersonQuotaHistory tabela.Wyzwalacz jest następnie modyfikowane za pomocą ALTER TRIGGER do zastosowania wyzwalacz tylko na INSERT działalności.Ten wyzwalacz jest przydatne, ponieważ przypomina użytkownika, który aktualizuje lub wstawia wiersze do tej tabela powiadamia również Compensation działu.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
    DROP TRIGGER Sales.bonus_reminder;
GO
CREATE TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
WITH ENCRYPTION
AFTER INSERT, UPDATE 
AS RAISERROR ('Notify Compensation', 16, 10);
GO
-- Now, change the trigger.
USE AdventureWorks2008R2;
GO
ALTER TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
AFTER INSERT
AS RAISERROR ('Notify Compensation', 16, 10);
GO

Zobacz także

Odwołanie

Koncepcje