Wie kann ich eine SQL Server-Datenbank auf Änderungen an einer Tabelle überwachen, ohne Trigger zu verwenden oder die Struktur der Datenbank in irgendeiner Weise zu ändern? Meine bevorzugte Programmierumgebung ist .NET und C #.
Ich möchte in der Lage sein, SQL Server 2000 SP4 oder neuer zu unterstützen. Meine Anwendung ist eine integrierte Datenvisualisierung für das Produkt eines anderen Unternehmens. Unser Kundenstamm liegt bei Tausenden, daher möchte ich nicht bei jeder Installation die Anforderungen stellen müssen, dass wir die Tabelle des Drittanbieters ändern.
Mit "Änderungen an einer Tabelle" meine ich Änderungen an Tabellendaten, nicht Änderungen an der Tabellenstruktur.
Letztendlich möchte ich, dass die Änderung ein Ereignis in meiner Anwendung auslöst, anstatt in regelmäßigen Abständen nach Änderungen suchen zu müssen.
Die beste Vorgehensweise angesichts meiner Anforderungen (keine Trigger oder Schemaänderungen, SQL Server 2000 und 2005) scheint darin zu bestehen, die BINARY_CHECKSUM
Funktion in T-SQL zu verwenden . Die Art und Weise, wie ich sie implementieren möchte, ist folgende:
Führen Sie alle X Sekunden die folgende Abfrage aus:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
Und vergleichen Sie das mit dem gespeicherten Wert. Wenn sich der Wert geändert hat, gehen Sie die Tabelle Zeile für Zeile mit der folgenden Abfrage durch:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
Und vergleichen Sie die zurückgegebenen Prüfsummen mit gespeicherten Werten.