Come posso monitorare un database di SQL Server per le modifiche a una tabella senza utilizzare i trigger o modificare la struttura del database in alcun modo? Il mio ambiente di programmazione preferito è .NET e C #.
Vorrei poter supportare qualsiasi SQL Server 2000 SP4 o versioni successive. La mia applicazione è una visualizzazione di dati imbullonati per il prodotto di un'altra azienda. La nostra base di clienti è a migliaia, quindi non voglio inserire requisiti che modifichino la tabella del fornitore di terze parti ad ogni installazione.
Per "modifiche a una tabella" intendo modifiche ai dati della tabella, non modifiche alla struttura della tabella.
In definitiva, vorrei che la modifica attivasse un evento nella mia applicazione, invece di dover controllare le modifiche a intervalli.
Il miglior modo di agire dato i miei requisiti (nessun trigger o modifica dello schema, SQL Server 2000 e 2005) sembra essere quello di utilizzare la BINARY_CHECKSUM
funzione in T-SQL . Il modo in cui ho intenzione di implementare è questo:
Ogni X secondi esegue la seguente query:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
E confrontalo con il valore memorizzato. Se il valore è stato modificato, scorrere la tabella riga per riga utilizzando la query:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
E confronta i checksum restituiti con i valori memorizzati.