Udostępnij za pośrednictwem


ALTER TRIGGER (języka Transact-SQL)

Modyfikuje definicji DML, DDL lub logowania wyzwalacz, który został wcześniej utworzony w instrukcja CREATE TRIGGER.Wyzwalacze są tworzone przy użyciu CREATE TRIGGER.They can be created directly from Transact-SQL statements or from methods of assemblies that are created in the Microsoft .NET Framework common language runtime (CLR) and uploaded to an instance of SQL Server.Aby uzyskać więcej informacji na temat parametrów, które są używane w instrukcja ALTER TRIGGER zobacz CREATE TRIGGER (języka Transact-SQL).

Topic link iconKonwencje składni języka Transact-SQL

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
    To nazwa schematu, do której należy dany wyzwalacz DML.DML triggers are scoped to the schema of the table or view on which they are created.schema_name is optional only if the DML trigger and its corresponding table or view belong to the default schema.schema_name cannot be specified for DDL or logon triggers.

  • trigger_name
    Czy istniejącego wyzwalacza do zmodyfikowania.

  • table | view
    Jest to tabela lub widok, na którym jest wykonywane wyzwalacz DML.Określanie w pełni kwalifikowaną nazwę tabela lub widoku jest opcjonalne.

  • BAZY DANYCH
    Stosuje się zakres wyzwalacz DLL do bieżącej bazy danych.Jeśli określono, przy każdym uruchomieniu wyzwalacza 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ślono, przy każdym uruchomieniu wyzwalacza event_type lub event_group występuje w dowolnym miejscu na bieżącym serwerze.

  • Z szyfrowanie
    Szyfruje wpisy sys.sql_modules sys.syscomments, które zawierają tekst instrukcja ALTER TRIGGER.Za pomocą WITH szyfrowanie uniemożliwia publikowana jako część wyzwalacza SQL Server replikacja. Nie można określić WITH szyfrowanie wyzwalaczy środowiska CLR.

    Uwaga

    Jeśli wyzwalacz został utworzony za pomocą WITH szyfrowanie, należy go ponownie określić w instrukcja ALTER TRIGGER dla tej opcji, które mają pozostać włączone.

  • wykonać JAKO
    Określa kontekst zabezpieczeń, na których jest wykonywana wyzwalacza.Umożliwia sterowanie konta użytkownika w wystąpieniu programu SQL Server używa do sprawdzania uprawnień do żadnych obiektów bazy danych, do których odwołuje się wyzwalacza.

    Aby uzyskać więcej informacji zobacz EXECUTE AS Clause (Transact-SQL).

  • PO
    Określa, że wyzwalacz jest uruchamiany tylko wtedy, gdy wyzwalającego instrukcja języka SQL zostanie wykonana pomyślnie.Wszystkie akcje Kaskada więzów i ograniczenia kontroli również musi zostały pomyślnie przed uruchomieniu tego wyzwalacza.

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

    Wyzwalacze DML później może być określona tylko dla tabel.

  • ZAMIAST
    Określa, że wyzwalacz DML jest wykonywany zamiast wyzwalającego instrukcja języka SQL, w związku z tym, zastępowanie akcje wyzwalającego instrukcja.INSTEAD OF nie mogą być określone dla wyzwalaczy DDL lub logowania.

    Co najwyżej jeden, a nie z wyzwalacza seryjnego na instrukcja INSERT, UPDATE lub DELETE mogą być definiowane w tabela lub widoku.Jednak istnieje możliwość zdefiniowania widoki na widokach, gdzie każdy widok ma swoją własną, a nie z wyzwalaczem.

    INSTEAD OF triggers are not allowed on views created by using WITH CHECK OPTION.SQL Server raises an error when an INSTEAD OF trigger is added to a view for which WITH CHECK OPTION was specified.Użytkownik musi usunąć tę opcję, przy użyciu instrukcji ALTER VIEW przed zdefiniowaniem wyzwalacza Z INSTEAD.

  • {[DELETE] [,] [WSTAW] [,] [AKTUALIZACJI]} | {[WSTAW] [,] [AKTUALIZACJI]}
    Określa instrukcji modyfikacji danych podczas prób przed w tej tabela lub wyświetlić, należy uaktywnić 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ę, oddziel przecinkami opcji.

    Dla a nie z wyzwalaczy, opcja DELETE nie jest dozwolona na tabele z relacją więzów określanie akcja Kaskadowo, ON DELETE.Podobnie opcje aktualizacji nie jest dozwolona na tabele z relacją więzów Określanie jest akcja Kaskada ON UPDATE.Aby uzyskać więcej informacji zobaczALTER tabela (języka Transact-SQL).

  • event_type
    Jest to nazwa Transact-SQL zdarzenie języka, który, po wykonaniu, powoduje uruchomienie wyzwalacz DLL. Ważne zdarzenia wyzwalaczy DDL są wymienione w DDL Events.

  • event_group
    Nazywa się grupą wstępnie zdefiniowanych Transact-SQL zdarzenia języka. wyzwalacz DLL uruchomieniu po wykonaniu wszelkich Transact-SQL zdarzenie języka, którego należy event_group. zdarzenie prawidłowej grupy wyzwalaczy DDL są wymienione na DDL Event Groups. Po instrukcji ALTER TRIGGER zakończy działanie, event_group również pełnić rolę makra przez dodanie obejmuje on typy zdarzeń do widoku sys.trigger_events wykazu.

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

  • sql_statement
    Jest to warunki wyzwalacza i akcje.

  • <method_specifier>
    Określa metoda wirtualny plik dziennika do powiązania z wyzwalaczem.The method must take no arguments and return void.class_name must be a valid SQL Server identifier and must exist as a class in the assembly with assembly visibility.Klasa nie może być zagnieżdżone klasy.

Remarks

Aby uzyskać więcej informacji na temat instrukcji ALTER TRIGGER zobacz uwagi w CREATE TRIGGER (języka Transact-SQL).

Wyzwalacze DML

ALTER TRIGGER supports manually updatable views through INSTEAD OF triggers on tables and views.SQL Server applies ALTER TRIGGER the same way for all kinds of triggers (AFTER, INSTEAD-OF).

Pierwszy i ostatni po wyzwalaczy, które mają być wykonane na tabela można określić przy użyciu sp_settriggerorder.Tylko jeden pierwszej i jedno ostatni po wyzwalacza można określić w tabela.W przypadku innych wyzwalacze po na tej samej tabela, są one losowo wykonywane.

Jeśli instrukcja ALTER TRIGGER ulegnie zmianie pierwszy lub ostatni wyzwalacz, pierwszy lub ostatni atrybut ten jest ustawiony na zmodyfikowanego wyzwalacza zostanie usunięte, a wartość zamówienia musi być zresetowane przy użyciu sp_settriggerorder.

Wyzwalacz po jest wykonywane tylko wtedy, gdy wyzwalającego instrukcja języka SQL została wykonana pomyślnie.To pomyślne wykonanie zawiera wszystkie akcje Kaskada więzów i ograniczenia kontroli skojarzone z obiektem zaktualizowany lub usunięty.Operacja wyzwalacza po sprawdza skutków wyzwalającego instrukcja i również wszystkich więzów Kaskada aktualizacji i usuwania akcji, które są powodowane przez wyzwalającego instrukcja.

Gdy akcji DELETE podrzędność lub odwołujący się tabela będącej wynikiem KASKADĘ na usunięcia tabela nadrzędnej, a wyzwalacz Z INSTEAD na DELETE jest zdefiniowany w tabela podrzędnej, wyzwalacz jest ignorowany i DELETE akcja jest wykonywana.

Wyzwalacze kod DDL

W odróżnieniu od DML wyzwalacze, Usługa wyzwalaczy DDL nie są objęty zakresem do schematów.Dlatego OBJECT_ID OBJECT_NAME, OBJECTPROPERTY i OBJECTPROPERTY(EX) nie można użyć gdy podczas badania metadane dotyczące DDL.W zamian za pomocą widoki wykazu.Aby uzyskać więcej informacji zobaczGetting Information About DDL Triggers.

Uprawnienia

Do zmiany wyzwalacz DML wymaga uprawnienia ALTER na tabela lub widoku, na którym jest zdefiniowana wyzwalacza.

Aby zmienić wyzwalacz DLL zdefiniowane przy użyciu zakres serwera (ON ALL SERVER) lub wyzwalacza logowania wymaga uprawnienia kontroli SERVER na serwerze.Zmienić DDL wyzwalacza zdefiniowane przy użyciu zakres bazy danych (ON DATABASE) wymaga uprawnienia ALTER bez TRIGGER DDL bazy danych w bieżącej bazie danych.

Przykłady

Poniższy przykład tworzy wyzwalacz DML, który drukuje zdefiniowanej przez użytkownika wiadomości do klient, gdy użytkownik próbuje dodać lub zmienić danych w SalesPersonQuotaHistory Tabela. Wyzwalacz jest następnie zmodyfikowany przy użyciu ALTER TRIGGER Aby zastosować tylko na wyzwalacza INSERT działania. Ten wyzwalacz jest przydatne, ponieważ przypomina, użytkownik, który aktualizuje lub wstawia wierszy do tej tabela także powiadomić Compensation Dział.

See Also

Reference

Other Resources