Notatka
Dostęp do tej strony wymaga autoryzacji. Może 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ą ma być uruchamiany jako pierwszy wyzwalacz AFTER albo jako ostatni wyzwalacz AFTER uruchamiany dla każdej z akcji wyzwalających 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.
Tabela może mieć jednocześnie 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, na przykład nie obejmując FOR UPDATE, FOR DELETE ani FOR INSERT, nie ma pierwszego ani 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 INSTEAD OF INSERT w widoku wstawia dane do tabeli bazowej, a sama tabela bazowa zawiera wyzwalacz INSTEAD OF INSERT i trzy wyzwalacze AFTER INSERT, wyzwalacz INSTEAD OF INSERT w tabeli bazowej jest uruchamiany zamiast operacji wstawiania, a wyzwalacze AFTER w tabeli bazowej są uruchamiane po każdej operacji wstawiania w tabeli bazowej. Aby uzyskać więcej informacji, zobacz Wyzwalacze DML.
ALTER TRIGGER Jeśli instrukcja zmieni pierwszy lub ostatni wyzwalacz, atrybut Pierwszy lub Ostatni zostanie porzucony, a wartość zamówienia jest ustawiona na 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.