¿Cómo puedo monitorear una base de datos de SQL Server en busca de cambios en una tabla sin usar activadores o modificar la estructura de la base de datos de alguna manera? Mi entorno de programación preferido es .NET y C #.
Me gustaría poder admitir cualquier SQL Server 2000 SP4 o posterior. Mi aplicación es una visualización de datos atornillada para el producto de otra compañía. Nuestra base de clientes es de miles, por lo que no quiero tener que exigir que modifiquemos la tabla de proveedores externos en cada instalación.
Por "cambios en una tabla" quiero decir cambios en los datos de la tabla, no cambios en la estructura de la tabla.
En última instancia, me gustaría que el cambio desencadenara un evento en mi aplicación, en lugar de tener que verificar los cambios a intervalos.
Parece que el mejor curso de acción dados mis requisitos (sin desencadenantes o modificación del esquema, SQL Server 2000 y 2005) es utilizar la BINARY_CHECKSUM
función en T-SQL . La forma en que planeo implementar es esta:
Cada X segundos ejecute la siguiente consulta:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
Y compare eso con el valor almacenado. Si el valor ha cambiado, revise la tabla fila por fila usando la consulta:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
Y compare las sumas de verificación devueltas con los valores almacenados.