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
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 KEYOgraniczenia mogą weryfikować wartość kolumny tylko z dokładnym dopasowaniem do wartości w innej kolumnie, chyba że klauzulaREFERENCESdefiniuje kaskadową akcję odwołania.Mogą chronić przed złośliwymi lub nieprawidłowymi operacjami
INSERT,UPDATEiDELETEoraz 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ć elementuSELECTz 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, lubDELETE) 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 KEYJednak ograniczenia są zwykle używane w tym celu.Jeśli ograniczenia istnieją w tabeli wyzwalacza, są sprawdzane po wykonaniu
INSTEAD OFwyzwalacza, ale przed wykonaniemAFTERwyzwalacza. Jeśli ograniczenia zostaną naruszone,INSTEAD OFakcje wyzwalacza zostaną wycofane, aAFTERwyzwalacz 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 tabelAkcja 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.
Powiązane zadania
| 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 |