Udostępnij za pomocą


Wyzwalacze DML

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Wyzwalacz DML jest specjalnym typem procedury składowanej, która automatycznie wchodzi w życie, gdy ma miejsce zdarzenie języka manipulowania danymi (DML), które wpływa na tabelę lub widok zdefiniowany w wyzwalaczu. Zdarzenia DML obejmują INSERT, UPDATE lub DELETE instrukcje. Wyzwalacze DML mogą służyć do wymuszania reguł biznesowych i integralności danych, wykonywania zapytań względem innych tabel i dołączania złożonych instrukcji Transact-SQL. Wyzwalacz i instrukcja, która uruchamia ją, są traktowane jako pojedyncza transakcja, którą można wycofać z wyzwalacza. Jeśli zostanie wykryty poważny błąd (na przykład za mało miejsca na dysku), cała transakcja zostanie automatycznie wycofana.

Korzyści

Wyzwalacze DML są podobne do ograniczeń, które mogą wymuszać integralność jednostki lub integralność domeny. Ogólnie rzecz biorąc, integralność encji powinna być zawsze wymuszana na najniższym poziomie przez indeksy, które są częścią ograniczeń PRIMARY KEY i UNIQUE, lub są tworzone niezależnie od ograniczeń. Integralność domeny powinna być wymuszana za pomocą CHECK ograniczeń, a integralność referencyjna (RI) powinna być wymuszana za pośrednictwem FOREIGN KEY ograniczeń. Wyzwalacze DML są najbardziej przydatne, gdy funkcje obsługiwane przez ograniczenia nie spełniają wymagań funkcjonalnych aplikacji.

Poniższa lista porównuje wyzwalacze DML z ograniczeniami i określa, kiedy wyzwalacze DML mają korzyści z ograniczeń.

  • Wyzwalacze DML mogą kaskadowo ulegać zmianom w powiązanych tabelach w bazie danych; jednak te zmiany można wykonać wydajniej przy użyciu kaskadowych ograniczeń integralności referencyjnej. FOREIGN KEY Ograniczenia mogą weryfikować wartość kolumny tylko z dokładnym dopasowaniem do wartości w innej kolumnie, chyba że klauzula REFERENCES definiuje kaskadową akcję odwołania.

  • Mogą chronić przed złośliwymi lub nieprawidłowymi operacjami INSERT, UPDATE i DELETE oraz wymuszać inne ograniczenia, które są bardziej złożone niż te zdefiniowane za pomocą ograniczeń CHECK.

    W przeciwieństwie do ograniczeń CHECK, wyzwalacze DML mogą odwoływać się do kolumn w innych tabelach. Na przykład wyzwalacz może użyć elementu SELECT z innej tabeli do porównania z wstawionym lub zaktualizowanymi danymi oraz do wykonywania innych akcji, takich jak modyfikowanie danych lub wyświetlanie komunikatu o błędzie zdefiniowanego przez użytkownika.

  • Mogą ocenić stan tabeli przed modyfikacją danych i po nim i podjąć działania na podstawie tej różnicy.

  • Wiele wyzwalaczy DML tego samego typu (INSERT, UPDATE, lub DELETE) w tabeli zezwala na wiele różnych akcji, które mają być podejmowane w odpowiedzi na tę samą instrukcję modyfikacji.

  • Ograniczenia mogą przekazywać informacje o błędach tylko za pośrednictwem ustandaryzowanych komunikatów o błędach systemowych. Jeśli aplikacja wymaga lub może korzystać z dostosowanych komunikatów i bardziej złożonej obsługi błędów, musisz użyć wyzwalacza.

  • Wyzwalacze DML mogą uniemożliwić lub wycofać zmiany naruszające integralność referencyjną, co spowoduje anulowanie próby modyfikacji danych. Taki wyzwalacz może wejść w życie, gdy zmienisz klucz obcy, a nowa wartość nie jest zgodna z jego kluczem podstawowym. FOREIGN KEY Jednak ograniczenia są zwykle używane w tym celu.

  • Jeśli ograniczenia istnieją w tabeli wyzwalacza, są sprawdzane po wykonaniu INSTEAD OF wyzwalacza, ale przed wykonaniem AFTER wyzwalacza. Jeśli ograniczenia zostaną naruszone, INSTEAD OF akcje wyzwalacza zostaną wycofane, a AFTER wyzwalacz nie zostanie wykonany.

Typy wyzwalacza DML

Wyzwalacz typu AFTER

AFTER wyzwalane są po wykonaniu akcji instrukcji INSERT, UPDATE, MERGE lub DELETE. AFTER wyzwalacze nigdy nie są wykonywane, jeśli wystąpi naruszenie ograniczenia. W związku z tym te wyzwalacze nie mogą być używane do przetwarzania, które może uniemożliwić naruszenie ograniczeń. Dla każdej akcji INSERT, UPDATE lub DELETE określonej w instrukcji MERGE odpowiedni wyzwalacz jest uruchamiany dla każdej operacji DML.

ZAMIAST WYZWALACZA

INSTEAD OF wyzwalacze zastępują standardowe akcje instrukcji wyzwalania. W związku z tym mogą służyć do przeprowadzania sprawdzania błędów lub wartości w co najmniej jednej kolumnie i wykonywania innych akcji przed wstawieniem, aktualizowaniem lub usuwaniem wiersza lub wierszy. Na przykład gdy wartość aktualizowana w kolumnie godzinowej w tabeli płac przekracza określoną wartość, można zdefiniować wyzwalacz w celu wygenerowania komunikatu o błędzie i wycofania transakcji lub wstawienia nowego rekordu do dziennika inspekcji przed wstawieniem rekordu do tabeli płac. Główną zaletą INSTEAD OF wyzwalaczy jest to, że umożliwiają one widoki, które nie byłyby możliwe do aktualizacji w celu obsługi aktualizacji. Na przykład widok oparty na wielu tabelach podstawowych musi używać INSTEAD OF wyzwalacza do obsługi wstawiania, aktualizacji i usuwania tych danych referencyjnych w więcej niż jednej tabeli. Kolejną zaletą INSTEAD OF wyzwalaczy jest to, że umożliwiają one tworzenie logiki kodu, która może odrzucać części partii, pozwalając jednocześnie na pomyślne wykonanie innych części partii.

W tej tabeli porównuje się funkcjonalność wyzwalaczy AFTER i INSTEAD OF.

Funkcja Wyzwalacz AFTER Wyzwalacz INSTEAD OF
Stosowanie Tabele Tabele i widoki
Ilość dla tabeli lub widoku Wiele na jedną akcję wyzwalającą (UPDATE, DELETE, oraz INSERT) Jedna na akcję wyzwalającą (UPDATE, DELETEi INSERT)
Referencje kaskadowe Nie obowiązują żadne ograniczenia Wyzwalacze INSTEAD OF UPDATE i DELETE nie są dozwolone w tabelach będących celami kaskadowych ograniczeń integralności referencyjnej.
Egzekucja Po:

Przetwarzanie ograniczeń

Deklaratywne akcje referencjalne

inserted i deleted tworzenie tabel

Akcja wyzwalacza
Przed: Przetwarzanie ograniczeń

Zamiast: akcja wyzwalająca

Po utworzeniu tabel inserted i deleted
Kolejność wykonywania Pierwsze i ostatnie wykonanie może być określone Nie dotyczy
varchar(max), nvarchar(max)i varbinary(max) odwołania do kolumn w tabelach inserted i deleted Dozwolone Dozwolone
text, ntext i image w odniesieniu do kolumn w tabelach inserted i deleted Niedozwolone Dozwolone

Wyzwalacz CLR

Wyzwalacz środowiska uruchomieniowego języka wspólnego (CLR) może być wyzwalaczem AFTER lub INSTEAD OF . Wyzwalacz CLR może być również wyzwalaczem języka definicji danych (DDL). Zamiast wykonywać procedurę składowaną Transact-SQL, wyzwalacz CLR wykonuje jedną lub więcej metod napisanych w kodzie zarządzanym, które są członkami zestawu utworzonego w ramach .NET Framework i załadowanego do SQL Server.

Zadanie Artykuł
Opisuje sposób tworzenia wyzwalacza DML. Tworzenie wyzwalaczy DML
Opisuje sposób tworzenia wyzwalacza CLR. Tworzenie wyzwalaczy CLR
Opisuje sposób tworzenia wyzwalacza DML do obsługi zarówno zmian danych jednowierszowych, jak i wielowierszowych. Tworzenie wyzwalaczy DML do obsługi wielu wierszy danych
Opisuje sposób zagnieżdżania wyzwalaczy. Tworzenie zagnieżdżonych wyzwalaczy
Opisuje sposób określania kolejności uruchamiania AFTER wyzwalaczy. Określanie pierwszych i ostatnich wyzwalaczy
Opisuje sposób używania specjalnych tabel wstawionych i usuniętych w kodzie wyzwalacza. Używanie wstawionych i usuniętych tabel
Opisuje sposób modyfikowania lub zmieniania nazwy wyzwalacza DML. Modyfikowanie lub zmienianie nazwy wyzwalaczy DML
Opisuje sposób wyświetlania informacji o wyzwalaczach DML. Uzyskaj informacje o wyzwalaczach DML
Opisuje sposób usuwania lub wyłączania wyzwalaczy DML. Usuwanie lub wyłączanie wyzwalaczy DML
Opisuje sposób zarządzania zabezpieczeniami wyzwalacza. Zarządzanie zabezpieczeniami wyzwalacza