sp_settriggerorder (języka Transact-SQL)
Określa wyzwalacze po, które są opalane pierwsze lub ostatnie.Wyzwalacze po, które opalanych między pierwszą i ostatnią wyzwalacze są uruchamiane w niezdefiniowanej kolejności.
Składnia
sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername'
, [ @order = ] 'value'
, [ @stmttype = ] 'statement_type'
[ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]
Argumenty
[ @triggername= ' triggerschema**.** triggername**'**
Jest to nazwa wyzwalacza i schematu do którego ona należy, w stosownych przypadkach, których kolejność ma być zestaw lub zmieniony.[triggerschema**.**]triggername is sysname.Procedura zwraca błąd, jeśli nazwa nie odpowiada wyzwalacza lub nazwa odpowiada wyzwalacza INSTEAD OF.triggerschemanie można określić dla Wyzwalacze DDL lub logowania.[ @order= ] 'value'
Jest to ustawienie dla nowego zamówienia wyzwalacza.valuejest varchar(10) i może to być jedna z następujących wartości.Ważne: Pierwszego i ostatniego wyzwalaczy musi być dwa różne wyzwalaczy.
Wartość
Opis
First
Wyzwalacz jest uruchamiany pierwszy.
Last
Wyzwalacz jest uruchamiany jako ostatni.
Brak
Wyzwalacz jest uruchamiany w niezdefiniowanej kolejności.
[ @stmttype= ] 'statement_type'
Określainstrukcja SQL, która fires wyzwalacza. statement_typejest varchar(50) i może być INSERT, UPDATE, DELETE, logowania ani żadnych Transact-SQL instrukcja zdarzenie wymienione w Zdarzenia DDL.Nie można określić grupy zdarzeń.Wyzwalacz może być wyznaczony jako pierwszego lub ostatniego wyzwalacz typu instrukcja dopiero po tym wyzwalacz został zdefiniowany jako bodziec dla tego typu instrukcja .Na przykład wyzwolić TR1 może być wyznaczony pierwszego do WSTAWIANIA w tabela T1 Jeśli TR1 jest zdefiniowany jako wyzwalacza WSTAWIENIA.Aparat baz danych Zwraca błąd, jeśli TR1, zdefiniowano tylko jako wyzwalacza WSTAWIENIA jest zestaw jako pierwszego, lub ostatniego, wyzwalacz AKTUALIZUJĄCĄ instrukcja.Aby uzyskać więcej informacji zobacz sekcję Spostrzeżenia.
obszar nazw @= { "Baza danych" | 'SERVER' | WARTOŚĆ NULL.}
Gdy triggername jest wyzwalacz DDL , określa, czy triggername został utworzony za pomocą serwera, zakreslub bazę danych zakres .Jeśli triggername jest wyzwalacz logowania serwera musi być określona.Aby uzyskać więcej informacji na temat DDL wyzwalacza zakreszobacz Zaprojektowanie Wyzwalacze DDL.Jeśli nie określono lub jeśli określona jest wartość NULL, triggername jest wyzwalacz DML .
Wartości kodów powrotnych
0 (sukces) i 1 (błąd)
Uwagi
WyzwalaczeDML
Może istnieć tylko jeden pierwszego i jednego ostatniego wyzwalacza dla każdej instrukcja w pojedynczej tabela.
Jeśli pierwszego wyzwalacz jest już zdefiniowany w tabela, bazy danych lub serwera, nie można wyznaczyć nowy wyzwalacz jako pierwszego dla tabela, bazy danych lub serwera dla tego samego statement_type.To ograniczenie dotyczy również ostatniego wyzwalaczy.
Replikacja automatycznie generuje pierwszego wyzwalacza dla dowolnej tabela , która jest wliczana do natychmiastowej aktualizacji lub aktualizowania subskrypcjaw kolejce.Replikacja wymaga jego wyzwalacza pierwszego wyzwalacza.Replikacja zgłasza błąd podczas próby dołączyć tabela z pierwszego wyzwalacza do natychmiastowej aktualizacji lub kolejce aktualizowania subskrypcja.Jeśli próby nawiązania pierwszego wyzwalacza wyzwalacza po tabela została zawarta w subskrypcja, sp_settriggerorder zwraca błąd.Jeśli funkcję WYZWALACZ ZMIENIA wyzwalacza replikacja lub użyj sp_settriggerorder Aby zmienić wyzwalacz replikacja do ostatniego lub Brak wyzwalacz subskrypcja jest funkcja poprawnie.
WyzwalaczeDDL
Jeśli wyzwalacz DDL z serwera, zakres i wyzwalaczy DDL bazę danych zakres istnieje na tym samym zdarzenie, można określić, że zarówno wyzwalaczy być pierwszego wyzwalacz lub ostatniego wyzwalacza.Jednak serwer o zakresie wyzwalaczy zawsze ognia najpierw.Ogólnie rzecz biorąc kolejność wykonywania Wyzwalacze DDL , które istnieją na tym samym zdarzenie jest następująca:
Oznaczone jako wyzwalaczpoziom serwera - pierwszego.
Inny serwer -poziom wyzwalaczy.
Oznaczone jako wyzwalaczpoziom serwera - ostatniego.
Oznaczone jako wyzwalaczpoziom bazy danych - pierwszego.
Inne bazy danych -poziom wyzwalaczy.
Oznaczone jako wyzwalaczpoziom bazy danych - ostatniego.
Względy ogólne wyzwalacza
Jeśli WYZWALACZ ZMIENIA instrukcja zmienia wyzwalacza pierwszego lub ostatniego pierwszego lub ostatniego atrybut pierwotnie zestaw wyzwalacz jest porzucane, a wartość otrzymuje brzmienie: Brak.Wartość zamówienia należy zresetować za pomocą sp_settriggerorder.
Jeśli ten sam wyzwalacz muszą być wyznaczone jako pierwszego lub ostatniego zamówienia dla więcej niż jeden typ instrukcja sp_settriggerorder musi być wykonywane dla każdego typu instrukcja .Także wyzwalacz musi najpierw zdefiniować dla typu instrukcja przed może być wyznaczony jako pierwszego lub ostatniego uruchomienie wyzwalacza INSTEAD dla tego typu instrukcja .
Uprawnienia
Aby zestaw kolejność wyzwalacza DDL z serwera zakres (na serwerze wszystkie utworzone) lub logowania wymaga uprawnień sterowania serwera.
Aby zestaw kolejność wyzwalacz DDL z bazy danych zakres (utworzona w bazie danych) wymaga uprawnień ALTER DATABASE każdy WYZWALACZ DDL .
Aby zestaw kolejność wyzwalaczy DML wymaga uprawnień ALTER na tabela lub widoku zdefiniowano wyzwalacza.
Przykłady
A.Ustawianie kolejności opalanych wyzwalacza DML
W następującym przykładzie określono, że wyzwalacz uSalesOrderHeader się pierwsze uruchomienie wyzwalacza INSTEAD po UPDATE operacji występuje na Sales.SalesOrderHeader tabela.
USE AdventureWorks2008R2;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';
B.Ustawianie kolejności opalanych wyzwalacza DDL
W następującym przykładzie określono, że wyzwalacz ddlDatabaseTriggerLog się pierwsze uruchomienie wyzwalacza INSTEAD po ALTER_TABLEw wystąpieniuzdarzenie AdventureWorks2008R2 bazy danych.
USE AdventureWorks2008R2;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';