¿Buscar cambios en una tabla de SQL Server?
¿Cómo puedo monitorear una base de datos de SQL Server para detectar cambios en una tabla sin usar disparadores 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 más reciente . 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.
El mejor curso de acción dados mis requisitos (sin desencadenantes o modificación de esquema, SQL Server 2000 y 2005) parece ser utilizar la función BINARY_CHECKSUM
en T-SQL . La forma en que planeo implementar es esta:
Cada X segundos ejecuta la siguiente consulta:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
Y compara 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.
Mostrar la mejor respuesta