Comment puis-je surveiller une base de données SQL Server pour les modifications apportées à une table sans utiliser de déclencheurs ou modifier la structure de la base de données de quelque manière que ce soit? Mon environnement de programmation préféré est .NET et C #.
J'aimerais pouvoir prendre en charge n'importe quel SQL Server 2000 SP4 ou plus récent. Mon application est une visualisation de données complémentaire pour le produit d'une autre entreprise. Notre base de clients se chiffre par milliers, je ne veux donc pas avoir à exiger que nous modifions la table du fournisseur tiers à chaque installation.
Par «modifications apportées à une table», j'entends des modifications des données de table, pas des modifications de la structure de la table.
En fin de compte, j'aimerais que la modification déclenche un événement dans mon application, au lieu d'avoir à vérifier les modifications à intervalles réguliers.
Le meilleur plan d'action étant donné mes besoins (pas de déclencheurs ou de modification de schéma, SQL Server 2000 et 2005) semble être d'utiliser la BINARY_CHECKSUM
fonction dans T-SQL . La façon dont je prévois de mettre en œuvre est la suivante:
Toutes les X secondes, exécutez la requête suivante:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
Et comparez cela à la valeur stockée. Si la valeur a changé, parcourez le tableau ligne par ligne à l'aide de la requête:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
Et comparez les sommes de contrôle renvoyées aux valeurs stockées.