Jaka jest różnica między wyzwalaczami FOR
i AFTER
?
Jaka jest różnica między wyzwalaczami FOR
i AFTER
?
Odpowiedzi:
Nie ma różnicy, robią to samo.
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
Jest taki sam jak
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
INSTEAD OF
Wyzwalacz jest inny, a pożary przed i zamiast wkładki i mogą być wykorzystane w widokach, w celu wprowadzenia odpowiednich wartości w tabelach bazowych.
@Ben ma całkowitą rację.
Oto artykuł MSDN Exploring SQL Server Triggers
Akapit z artykułu:
Ta składnia jest również akceptowalna w starszych wersjach SQL Server. Jednakże teraz, gdy istnieją dwa typy wyzwalaczy w SQL Server 2000, wolę nazywać wyzwalacze FOR jako wyzwalacze PO. Dlatego przez pozostałą część tego artykułu będę odnosić się do wyzwalaczy PO lub ZAMIAST.
Podobnie jak wyzwalacz AFTER, który widziałeś wcześniej, ten wyzwalacz zapobiega wprowadzaniu zmian w polu lastname. Jednak implementuje tę regułę biznesową inaczej niż w poprzednim przykładzie. Ponieważ wyzwalacz INSTEAD OF jest uruchamiany zamiast instrukcji UPDATE, wyzwalacz INSTEAD OF ocenia, czy test reguły biznesowej zakończy się pomyślnie, czy nie. Jeśli test reguły biznesowej zakończy się pomyślnie, aby aktualizacja nastąpiła, wyzwalacz INSTEAD OF musi jawnie ponownie wywołać instrukcję UPDATE.
AFTER określa, że wyzwalacz DML jest uruchamiany tylko wtedy, gdy wszystkie operacje określone w wyzwalającej instrukcji SQL zostały pomyślnie wykonane. Wszystkie referencyjne akcje kaskadowe i sprawdzenia ograniczeń również muszą się powieść, zanim ten wyzwalacz zostanie uruchomiony. AFTER jest ustawieniem domyślnym, gdy FOR jest jedynym określonym słowem kluczowym.
Wyzwalaczy AFTER nie można definiować w widokach.
INSTEAD OF Określa, że wyzwalacz DML jest wykonywany zamiast wyzwalającej instrukcji SQL, w związku z czym przesłania akcje instrukcji wyzwalających. Nie można określić INSTEAD OF dla wyzwalaczy DDL lub logowania.
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql