Jak mogę monitorować bazę danych SQL Server pod kątem zmian w tabeli bez używania wyzwalaczy lub modyfikowania w jakikolwiek sposób struktury bazy danych? Moje preferowane środowisko programistyczne to .NET i C #.
Chciałbym móc obsługiwać dowolny SQL Server 2000 SP4 lub nowszy. Moja aplikacja to skręcana wizualizacja danych dla produktu innej firmy. Nasza baza klientów jest w tysiącach, więc nie chcę nakładać wymagań, aby modyfikować tabelę zewnętrznego dostawcy przy każdej instalacji.
Przez „zmiany w tabeli” rozumiem zmiany danych tabeli, a nie zmiany struktury tabeli.
Ostatecznie chciałbym, aby zmiana wyzwalała zdarzenie w mojej aplikacji, zamiast sprawdzać zmiany w odstępach czasu.
Wydaje się, że najlepszym sposobem działania, biorąc pod uwagę moje wymagania (brak wyzwalaczy lub modyfikacji schematu, SQL Server 2000 i 2005), jest użycie BINARY_CHECKSUM
funkcji w T-SQL . Sposób, w jaki planuję wdrożyć, jest następujący:
Co X sekund uruchamiaj następujące zapytanie:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
I porównaj to z wartością przechowywaną. Jeśli wartość uległa zmianie, przejdź przez tabelę wiersz po wierszu, używając zapytania:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
I porównaj zwrócone sumy kontrolne z zapisanymi wartościami.