Wprowadzam kilka poprawek do starszej aplikacji zbudowanej na bazie SQL Server 2000, nie trzeba dodawać, że chcę zrobić absolutne minimum w obawie, że może się po prostu rozpaść.INSTEAD OF UPDATE Trigger - czy to możliwe?
Mam dużą tabelę użytkowników, tbUsers, z flagą BIT dla IsDeleted. Chcę zarchiwizować wszystkie obecne i przyszłe rekordy użytkownika IsDeleted = 1 w mojej tabeli archiwum tbDeletedUsers.
Przenoszenie aktualnie usuniętych użytkowników jest proste, jednak chcę mieć sposób na przeniesienie wszystkich przyszłych użytkowników, dla których ustawiono flagę IsDeleted. Mógłbym użyć standardowego wyzwalacza AFTER na kolumnie, jednak planuję dodać pewne ograniczenia do tabeli tbUser, które naruszają to, co chciałbym, aby mój wyzwalacz INSTEAD OF UPDATE uruchamiał i przenosił rekord do tabeli archiwum?
Domyślam się, że moje pytanie brzmi ... czy można wywołać wyzwalacz INSTEAD OF UPDATE w aktualizacji pojedynczej kolumny? Oto, co mam do tej pory:
CREATE TRIGGER trg_ArchiveUsers
INSTEAD OF UPDATE ON tbUsers
AS
BEGIN
...
END
GO
Jeśli tak, przykładowy plik (zgodny z SQL 2000) byłby bardzo doceniany!
aktualizacji (columnName) nie istnieje w SQL Server. Zamiast tego użyj COLUMNS_UPDATED (columnName). http://msdn.microsoft.com/en-us/library/ms186329.aspx –
Dziękuję za komentarz. Masz rację, nie ma żadnej funkcji UPDATES() w SQL Server ani UPDATED(), jak pisałem na początku. W rzeczywistości nazywa się [UPDATE()] (http://msdn.microsoft.com/en-us/library/ms187326.aspx). Edytuję moją odpowiedź i jeszcze raz dziękuję za zwrócenie mojej uwagi na moją uwagę. –
I wydajesz się też być w błędzie, ponieważ COLUMNS_UPDATED() nie akceptuje parametru. Zwraca bitową maskę odzwierciedlającą wszystkie kolumny, których dotyczy instrukcja, która wywołała wyzwalacz. Nigdy nie używałem tej funkcji, chociaż z podręcznika, myślę, że mam ciekawy pomysł, jak z niego korzystać. –