Articles

SQL Server Trigger After Update for a Specific Value

By: Dallas Snider | Updated: 2015-09-10 | Comments (6) | Related: More > Triggers

Problem

muszę utworzyć WYZWALACZ SQL Server, który zostanie uruchomiony, gdy wartość kolumny zostanie zaktualizowana do określonej wartości. Jak mogę to zrobić?

rozwiązanie

w tej podpowiedzi pokażemy, jak napisać instrukcje T-SQL, które stworzą WYZWALACZ SQLServer, który zostanie wykonany po zaktualizowaniu wartości kolumny do określonej wartości.

na poniższym obrazku widzimy, gdzie tworzymy naszą przykładową tabelę o nazwie tblTriggerTest z kolumną klucza podstawowego o nazwie pkID, kolumną daty o nazwie OrderApprovalDateTime i kolumną varchar o nazwie OrderStatus. Wypełniamy tabelę trzema rekordami testowymi z OrderApprovalDateTime ustawionym na NULL i OrderStatus ustawionym na „Pending”.

Utwórz tabelę i wstaw przykładowe dane

w tym przykładzie chcemy, aby nasz WYZWALACZ wypełniał OrderApprovalDateTime bieżącą datą podaną przez funkcję getdate() po zaktualizowaniu OrderStatus do „Approved”. T-SQL do utworzenia tego wyzwalacza jest pokazany poniżej. Bardzo ważne jest, aby dołączyć wewnętrzne połączenie do wstawionej tabeli, aby wpływały tylko na zaktualizowane wiersze. Użycie klauzuli, w której OrderStatus= 'Approved’ samo w sobie, aby ograniczyć zaktualizowane wiersze, spowoduje, że wszystkie wiersze z wartością orderstatus zatwierdzonego zostaną zaktualizowane w tym samym czasie.

pomyślnie Utwórz trigger

aby przetestować trigger, wykonamy instrukcję T-SQL UPDATE, aby ustawić wartość OrderStatus na „Approved” dla pierwszego wiersza w tabeli (pkID = 1). Po poleceniu T-SQL UPDATE wykonujemy zapytanie T-SQL SELECT, aby upewnić się, że wyzwalacz został poprawnie wykonany. Dane wyjściowe z instrukcji UPDATE I SELECT są pokazane poniżej.

pomyślnie przetestuj WYZWALACZ

zauważ powyżej, że tylko pierwszy wiersz miał ustawioną OrderApprovalDateTime na bieżącą datę, co jest naszym pożądanym zachowaniem. Musimy jednak przeprowadzić drugi test, aby upewnić się, że prawidłowa liczba wierszy została zaktualizowana. W naszym drugim teście wykonamy instrukcję T-SQL UPDATE, aby ustawić wartość OrderStatus na „Approved” dla drugiego wiersza w tabeli (pkID = 2). Po wybraniu wszystkich rekordów w tabeli należy zauważyć, że OrderApprovalDateTime dla drugiego wiersza nie jest równe OrderApprovalDateTime dla pierwszego wiersza. Ponownie, jest to nasze pożądane zachowanie i wszystko wydaje się dobrze.

przetestuj ponownie WYZWALACZ

Pełny kod tej wskazówki znajduje się w polu poniżej.

use MSSQLTipsgocreate table tblTriggerTest( pkID integer Identity(1,1) primary key, OrderApprovalDateTime datetime, OrderStatus varchar(20))insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')select * from tblTriggerTestgocreate trigger trTriggerTest on tblTriggerTestafter updateasbegin set nocount on; update tblTriggerTest set OrderApprovalDateTime=getdate() from tblTriggerTest t inner join inserted i on t.pkID=i.pkID and i.OrderStatus='Approved'endgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=1goselect * from tblTriggerTestgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=2goselect * from tblTriggerTestgo
kolejne kroki

poświęć kilka minut, aby dowiedzieć się, co dzieje się po zmianie połączenia wewnętrznego lub dodaniu większej liczby kolumn do tabeli i wyzwalaniu.

sprawdź też więcej porad na serwerze SQL na MSSQLTips.com.

  • wymuszanie kolejności wyzwalania w SQL Server
  • zapobieganie przypadkowemu aktualizowaniu lub usuwaniu poleceń wszystkich wierszy w tabeli SQL Server
  • Kontrola, gdy wyzwalacze są wyłączone lub włączone dla SQL Server

Ostatnia aktualizacja: 2015-09-10

Pobierz Skrypty

next tip button

o autorze
mssqltips autor Dallas SniderDr. Dallas Snider jest adiunktem na Wydziale Informatyki na University of West Florida i ma ponad 18 lat doświadczenia w SQL.
Zobacz wszystkie moje porady
powiązane zasoby

  • Więcej porad dla programistów baz danych…