2009-05-27 7 views
8

Chcę wiedzieć, jakie kolumny, które zostały zaktualizowane podczas operacji aktualizacji na trigeru w pierwszej przerywanej książce w Internecie, wygląda na to, że COLUMNS_UPDATED jest idealnym rozwiązaniem, ale ta funkcja faktycznie nie sprawdza, czy wartości się zmieniły, sprawdza tylko, które kolumny zostały wybrane w klauzula aktualizacji, ktoś ma inne sugestie?Jak uzyskać listę zaktualizowanych kolumn w wyzwalaczu serwera SQL?

Odpowiedz

8

Jedynym sposobem sprawdzenia, czy wartości się zmieniły, jest porównanie wartości w tabelach wirtualnych DELETED i INSERTED w ramach wyzwalacza. SQL nie sprawdza istniejącej wartości przed aktualizacją do nowej, z radością napisze nową, identyczną wartość na górze - innymi słowy, bierze słowo do aktualizacji i śledzi aktualizację zamiast faktycznych zmian.

0

Jedyny sposób, jaki mogę wymyślić to to, że można porównać wartości w USUNIĘTE i WSTAWIONE, aby zobaczyć, które kolumny się zmieniły.

Nie wydaje się jednak szczególnie eleganckim rozwiązaniem.

0

Zapytałem this same question!

Poprzednie plakaty są poprawne - bez bezpośredniego porównania wartości nie można stwierdzić z całą pewnością, czy dane rzeczywiście się zmieniły, czy nie. Istnieje jednak kilka sposobów na sprawdzenie tego typu, w zależności od tego, co jeszcze próbujesz zrobić w wyzwalaczu. Moje pytanie ma kilka dobrych rad w odpowiedziach na temat tych różnych mechanizmów i ich kompromisów.

4

Jak napisali inni, musisz przesłuchać WSTAWIONE i USUWAĆ. Tylko inne użyteczne nieco rada może być to, że można dostać tylko te wiersze, które zostały zmienione wartości (i usunąć wiersze, które nie zmienia się) za pomocą operatora wyjątkiem - tak:

SELECT * FROM Inserted 
EXCEPT 
SELECT * FROM Deleted 
Powiązane problemy