sp_settriggerorder (języka Transact-SQL)
Wykonywanie.Oczekiwanie na wątek.
sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername'
, [ @order = ] 'value'
, [ @stmttype = ] 'statement_type'
[ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]
Argumenty
[ @triggername= ] '[ triggerschema**.] triggername'**
Zawieszone.[triggerschema**.**]triggername is sysname.If the name does not correspond to a trigger or if the name corresponds to an INSTEAD OF trigger, the procedure returns an error.triggerschema cannot be specified for DDL or logon triggers.[ @order= ] 'value'
Is the setting for the new order of the trigger.value is varchar(10) and it can be any one of the following values.Important Note: The First and Last triggers must be two different triggers.
Wartość
Description
First
Wyzwalacz jest uruchamiany jako pierwszy.
Last
Wyzwalacz jest uruchamiany jako ostatni.
None
Wyzwalacz jest uruchamiany w nieokreślonej kolejności.
[ @stmttype= ] 'statement_type'
Określa instrukcję SQL uruchamiającą wyzwalacz.Typ statement_type to varchar(50) i może to być INSERT, UPDATE, DELETE, LOGON lub dowolne zdarzenie instrukcji Transact-SQL wymienione na liście DDL Events.Nie można podawać grup zdarzeń.Wyzwalacz może być wyznaczony jako Pierwszy or Ostatni wyzwalacza dla typu instrukcja, tylko wtedy, gdy ten wyzwalacz został zdefiniowany jako wyzwalacz dla tego typu instrukcja.Na przykład wyzwalacz TR1 może być wyznaczony Pierwszy dla INSERT w tabela T1 if TR1 jest definiowana jako wyzwalacza WSTAWIENIA.The Database Engine returns an error if TR1, which has been defined only as an INSERT trigger, is zestaw as a First, or Last, trigger for an UPDATE instrukcja.Aby uzyskać więcej informacji zobacz sekcję Spostrzeżenia.
@namespace= { 'DATABASE' | 'SERVER' | NULL }
Gdy triggername jest wyzwalaczem DDL, określa, czy triggername został utworzony w zakresie bazy danych czy w zakresie serwera.Jeśli triggername jest wyzwalaczem logowania, musi być określona opcja SERVER.Aby uzyskać więcej informacji na temat zakresu wyzwalacza DDL, zobacz Designing DDL Triggers.Jeśli nie jest określony lub ma wartość NULL, triggername będzie wyzwalaczem DML.
Wartości kodów powrotnych
0 (sukces) i 1 (brak)
Remarks
Wyzwalacze DML
Może istnieć tylko jeden Pierwszy and one Ostatni wyzwalacza dla każdej instrukcja w jednej tabela.
Jeśli Pierwszy wyzwalacz jest już zdefiniowany w tabela, baza danych lub serwera, nowy wyzwalacz nie można oznaczyć jako Pierwszy dla tej samej tabela, baza danych lub serwera dla tego samego statement_type. To ograniczenie dotyczy także Ostatni wyzwalaczy.
Funkcja replikacji automatycznie generuje pierwszy wyzwalacz dla dowolnej tabeli wchodzącej w skład natychmiastowo lub kolejkowo aktualizowanej subskrypcji.Funkcja replikacji wymaga, aby jej wyzwalacz był pierwszym wyzwalaczem.Funkcja replikacji zgłasza błąd w wypadku próby uwzględnienia tabeli w pierwszym wyzwalaczu w natychmiastowo lub kolejkowo aktualizowanej subskrypcji.Próba określenia wyzwalacza jako pierwszego wyzwalacza po uwzględnieniu tabeli w subskrypcji spowoduje, że procedura składowana sp_settriggerorder zwróci błąd.Użycie instrukcji ALTER TRIGGER w wyzwalaczu replikacji lub użycie procedury składowanej sp_settriggerorder w celu zmienienia wyzwalacza replikacji na Last (ostatni) lub None (brak) spowoduje, że subskrypcja nie będzie działać prawidłowo.
Wyzwalacze kod DDL
Jeśli w tym samym zdarzeniu istnieje wyzwalacz DDL w zakresie bazy danych oraz wyzwalacz DDL w zakresie serwera, można określić, że oba wyzwalacze będą wyzwalaczem First (pierwszy) lub Last (ostatni).Jednak wyzwalacze w zakresie serwera są zawsze uruchamiane jako pierwsze.Na ogół, kolejność uruchamiania wyzwalaczy DDL istniejących w tym samym zdarzeniu jest następująca:
Serwer-poziom oznaczone jako wyzwalacz Pierwszy.
Inne wyzwalacze poziomu serwera.
Oznaczone jako wyzwalacz poziomie serwera Ostatni.
Oznaczone jako wyzwalacz poziom bazy danych Pierwszy.
Inne wyzwalacze poziomu bazy danych.
Oznaczone jako wyzwalacz poziom bazy danych Ostatni.
Ogólne uwagi dotyczące wyzwalaczy
Jeśli wyzwalacz pierwszej lub ostatniej zmiany instrukcja ALTER TRIGGER Pierwszy or Ostatni atrybut pierwotnie ustawić wyzwalacz zostanie usunięte, a wartość zastępuje Brak.Wartość zamówienia musi być zresetowane przy użyciu 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 muszą być wykonane dla każdego typu instrukcja.Ponadto wyzwalacza należy najpierw zdefiniować dla typu instrukcja zanim może ona być wyznaczony jako Pierwszy or Ostatni wyzwalacz ognia dla tego typu instrukcja.
Uprawnienia
Interwał (w minutach) między próbami żadnych ponownych prób.
os_run_priority
output_file_name
Przykłady
A.Ustawianie kolejności uruchamiania wyzwalacza DML
W poniższym przykładzie określa się, że wyzwalacz uSalesOrderHeader być pierwszego wyzwalacza uruchomienie po UPDATE Operacja jest wykonywane na Sales.SalesOrderHeader Tabela.
USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';
B.last_run_retries
W poniższym przykładzie określa się, że wyzwalacz ddlDatabaseTriggerLog być pierwszego wyzwalacza uruchomienie po ALTER_TABLE zdarzenie w AdventureWorks Baza danych.
USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';