Nie, nie ma żadnych. Każde śledzenie typu „ostatnia aktualizacja o” miałoby poważny problem z wydajnością, ponieważ wszystkie aktualizacje ze wszystkich transakcji próbowałyby zaktualizować jeden rekord śledzący „ostatnią aktualizację o”. To skutecznie oznaczać tylko jedna transakcja może zaktualizować tabelę w dowolnym momencie, a wszystkie inne transakcje muszą czekać na pierwszego do popełnienia . Pełna serializacja. Liczba administratorów / deweloperów gotowych znieść taki spadek wydajności tylko po to, aby wiedzieć, kiedy nastąpiła ostatnia aktualizacja, jest prawdopodobnie niewielka.
Więc jesteś osierocony, aby obsłużyć go za pomocą niestandardowego kodu. Oznacza to wyzwalacze, ponieważ alternatywa (wykrywanie z rejestrów dziennika) jest przywilejem zarezerwowanym tylko dla transakcyjnej replikacji (lub jest to alter ego CDC ). Pamiętaj, że jeśli spróbujesz śledzić go za pomocą kolumny „ostatnia aktualizacja o”, napotkasz dokładnie wspomniany powyżej problem serializacji. Jeśli współbieżność aktualizacji jest ważna, należy użyć mechanizmu kolejki (wyzwalacz używa INSERT, a następnie proces agreguje wstawione wartości w celu sformułowania „ostatniej aktualizacji o”). Nie próbuj oszukiwać za pomocą jakiegoś „sprytnego” rozwiązania, takiego jak skradanie się do bieżącej tożsamości lub wyszukiwanie sys.dm_db_index_usage_stats . A także kolumna „updated_at” na rekord, tak jak znaczniki czasu Railsów,
Czy istnieje jakaś „lekka” alternatywa? Tak naprawdę jest jeden, ale trudno powiedzieć, czy będzie on dla ciebie działał i czy trudno jest go poprawnie wykonać: Powiadomienia o zapytaniach . Powiadomienie zapytania robi dokładnie to, ustawi powiadomienie, jeśli jakieś dane ulegną zmianie i konieczne będzie odświeżenie zapytania. Chociaż większość programistów zna tylko jego inkarnację .Net jako SqlDependency, powiadomienia kwerendy można używać jako długo działający, utrwalony mechanizm wykrywania zmian danych. W porównaniu z prawdziwym śledzeniem zmian, będzie on bardzo lekki, a jego semantyka jest bliższa twoim potrzebom (coś, cokolwiek , zmieniło się, więc musisz ponownie uruchomić zapytanie).
Ale ostatecznie, na twoim miejscu, naprawdę przemyślę ponownie moje założenia i wrócę do tablicy kreślarskiej. Być może możesz użyć wysyłki dziennika lub replikacji, aby skonfigurować bazę danych raportowania na innym serwerze. Czytam między wierszami, że potrzebujesz odpowiedniej linii ETL i hurtowni danych analitycznych ...