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
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.
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.
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.
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
Możemy użyć funkcja aktualizacji do znalezienia, jeśli dana kolumna jest aktualizowana:
IF UPDATE(ColumnName)
zobacz ten link do informacji: http://msdn.microsoft.com/en-us/library/ms187326.aspx
- 1. Jak uzyskać listę nazw kolumn
- 2. Wykrywanie zmian kolumn w wyzwalaczu aktualizacji PostgreSQL
- 3. Określić Stary klucz podstawowy w wyzwalaczu SQL
- 4. Uzyskaj listę kolumn obliczeniowych w tabeli bazy danych (SQL Server)
- 5. SQL Alchemy - Jak uzyskać listę tabel
- 6. Jak uzyskać listę tematów z serwera kafka w Javie
- 7. Jak uzyskać listę wszystkich sesji serwera w laravel?
- 8. SQL: Wyszukaj listę kolumn o danej wartości (w wierszu)
- 9. Jak uzyskać listę wszystkich baz danych z serwera sql w combobox przy użyciu C# .net
- 10. Jak uzyskać wiele kolumn w pojedynczej instrukcji SQL CASE?
- 11. Jak zainicjować listę kolumn dwóch?
- 12. Gdzie znajdę metadane serwera Sql dla typów danych kolumn?
- 13. Uzyskaj listę unikalnych kolumn ograniczeń (w TSQL)?
- 14. Bieżący identyfikator transakcji w wyzwalaczu kontroli
- 15. Jak mogę uzyskać listę kolumn w tabeli dla bazy danych SQLite?
- 16. W vb.net, jak uzyskać nazwy kolumn z datatable
- 17. Aby uzyskać całkowitą liczbę kolumn w tabeli w sql
- 18. Parametry serwera SQL xp_delete_file
- 19. Jak uzyskać bezpieczną dla XML wersję kolumny XML serwera sql
- 20. Jak uzyskać nazwę węzła ROOT z serwera SQL Server
- 21. Jak zwrócić liczbę zaktualizowanych obiektów w mongodb?
- 22. Jaka jest składnia użycia instrukcji Select w wyzwalaczu PL/SQL?
- 23. Jak przerwać operację WSTAW w wyzwalaczu MySql?
- 24. Aktualizacja wielu kolumn w SQL
- 25. Jak używać właściwości niestandardowych w wyzwalaczu ControlTemplate
- 26. SQL SELECT wiele kolumn w jednym
- 27. Jak sortować połączoną listę w sql?
- 28. Doctrine2 Buforowanie zaktualizowanych elementów
- 29. SQL Update - wiele kolumn
- 30. Ignorowanie wyjątku w wyzwalaczu wyroczni