Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Woher weiß eine SqlCacheDependency, wann sie an Listener zurückmelden muss, wenn sich Daten in einer Tabelle ändern?

In Ihrer Datenbank wird eine neue Tabelle erstellt, die einen Namen der Tabelle enthält, für die Sie nach Aktualisierungen suchen möchten, sowie eine Änderungsnummer. Jede Tabelle, die Sie für sqldependency eingerichtet haben, hat einen Auslöser für Aktualisierungen/Einfügungen, der die Änderungs-ID in der gerade beschriebenen neuen Tabelle erhöht.

Ihr mentales Modell, wie dies funktioniert, ist rückwärts. Ihre Anwendung überprüft das Protokoll, um festzustellen, ob sich eine Tabelle geändert hat.

Wenn also die Changelog-Tabelle (so nenne ich sie) zwei Tabellen in Ihrer Datenbank verfolgt (Produkt, Benutzer), sieht das so aus.

+Table Name + ChangeNumber +
| Product   | 1            |
+-----------+--------------+
| User      | 1            |
+-----------+--------------+

Wenn Sie nun etwas in einer dieser Tabellen ändern, erhöht der Trigger ChangeNumber und wir wissen jetzt, dass sie sich geändert haben.

Offensichtlich steckt noch mehr dahinter, aber das ist die allgemeine Idee.

Hinweis:Es sollte beachtet werden, dass Sie eine Seite ungültig machen können, wenn sich eine oder mehrere Tabellen ändern. Wenn Ihre Seite also Abhängigkeiten für diese beiden Tabellen eingerichtet hat, wird die zwischengespeicherte Seite ungültig und eine aktualisierte neu zwischengespeichert, wenn sich eine von ihnen ändert Version.