Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Można określić, że jeden z wyzwalaczy AFTER skojarzonych z tabelą jest pierwszym wyzwalaczem AFTER lub ostatnim wyzwalaczem AFTER, który jest wyzwalany dla każdej akcji wyzwalania INSERT, DELETE i UPDATE. Wyzwalacze AFTER uruchamiane między pierwszymi i ostatnimi wyzwalaczami są uruchamiane w niezdefiniowanej kolejności.
Aby określić kolejność dla wyzwalacza AFTER, użyj procedury składowanej sp_settriggerorder. sp_settriggerorder ma następujące opcje.
| Option | Description |
|---|---|
| First | Określa, że wyzwalacz DML jest pierwszym wyzwalaczem AFTER uruchamianym dla danej akcji wyzwalającej. |
| ostatnia | Określa, że wyzwalacz DML jest ostatnim wyzwalaczem typu AFTER, który został uruchomiony dla danej akcji wyzwalającej. |
| Brak | Określa, że nie ma określonej kolejności, w której powinien zostać wyzwolony wyzwalacz DML. Służy głównie do resetowania wyzwalacza, który jest ustawiony jako pierwszy lub jako ostatni. |
W poniższym przykładzie pokazano użycie sp_settriggerorder:
sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
Ważne
Pierwsze i ostatnie wyzwalacze muszą być dwoma różnymi wyzwalaczami DML.
W tabeli mogą być zdefiniowane wyzwalacze INSERT, UPDATE i DELETE. Każdy typ instrukcji może mieć własne pierwsze i ostatnie wyzwalacze, ale nie mogą być tymi samymi wyzwalaczami.
Jeśli pierwszy lub ostatni wyzwalacz zdefiniowany dla tabeli nie obejmuje akcji wyzwalającej, takiej jak brak akcji AKTUALIZACJI, USUWANIA lub WSTAWIANIA, nie ma pierwszego lub ostatniego wyzwalacza dla brakujących akcji.
Wyzwalacze INSTEAD OF nie mogą być określone jako pierwszy lub ostatni wyzwalacz. Zdarzenia typu INSTEAD OF są wyzwalane przed wykonaniem aktualizacji w bazowych tabelach. Jeśli aktualizacje są wprowadzane przez wyzwalacz TYPU INSTEAD OF na tabelach bazowych, aktualizacje są wykonywane przed wyzwoleniem wszystkich wyzwalaczy AFTER zdefiniowanych w tabeli. Jeśli na przykład wyzwalacz ZAMIAST WSTAWIANIA w widoku wstawia dane do tabeli bazowej, a sama tabela bazowa zawiera wyzwalacz ZAMIAST WSTAWIANIA i trzy wyzwalacze PO WSTAWIENIU, wyzwalacz ZAMIAST WSTAWIANIA w tabeli bazowej jest wyzwalany zamiast akcji wstawiania, a wyzwalacze PO WSTAWIENIU w tabeli bazowej są wyzwalane po każdej akcji wstawiania do tabeli bazowej. Aby uzyskać więcej informacji, zobacz Wyzwalacze DML.
Jeśli instrukcja ALTER TRIGGER zmieni pierwszy lub ostatni wyzwalacz, atrybut Pierwszy lub Ostatni zostanie porzucony, a wartość zamówienia ma wartość Brak. Kolejność musi zostać zresetowana przy użyciu sp_settriggerorder.
Funkcja OBJECTPROPERTY zgłasza, czy wyzwalacz jest pierwszym lub ostatnim wyzwalaczem przy użyciu następujących właściwości: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTrigger i ExecIsLastDeleteTrigger.
Replikacja automatycznie generuje pierwszy wyzwalacz dla każdej tabeli uwzględnionej w subskrypcji natychmiastowej aktualizacji lub kolejkowej aktualizacji. Replikacja wymaga, aby jego wyzwalacz był pierwszym wyzwalaczem. Replikacja powoduje błąd, gdy próbujesz uwzględnić tabelę z pierwszym wyzwalaczem w subskrypcji natychmiastowej aktualizacji lub kolejkowej aktualizacji. Jeśli spróbujesz ustawić wyzwalacz jako pierwszy wyzwalacz po dołączeniu tabeli do subskrypcji, sp_settriggerorder zwróci błąd. Jeśli używasz funkcji ALTER w wyzwalaczu replikacji lub użyjesz sp_settriggerorder , aby zmienić wyzwalacz replikacji na ostatni lub żaden wyzwalacz, subskrypcja nie będzie działać poprawnie.
Zobacz też
OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder (Transact-SQL)