Como posso monitorar um banco de dados do SQL Server para alterações em uma tabela sem usar gatilhos ou modificar a estrutura do banco de dados de alguma maneira? Meu ambiente de programação preferido é o .NET e C #.
Eu gostaria de poder oferecer suporte a qualquer SQL Server 2000 SP4 ou mais recente. Meu aplicativo é uma visualização de dados aparafusada para o produto de outra empresa. Nossa base de clientes está na casa dos milhares, por isso não quero exigir que modifiquemos a tabela de fornecedores terceirizados a cada instalação.
Por "alterações em uma tabela", quero dizer alterações nos dados da tabela, não alterações na estrutura da tabela.
Por fim, gostaria que a alteração acionasse um evento no meu aplicativo, em vez de ter que verificar alterações em um intervalo.
O melhor curso de ação, considerando meus requisitos (sem gatilhos ou modificação de esquema, SQL Server 2000 e 2005), parece ser o uso da BINARY_CHECKSUM
função no T-SQL . A maneira que planejo implementar é esta:
A cada X segundos, execute a seguinte consulta:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
E compare isso com o valor armazenado. Se o valor foi alterado, percorra a tabela linha por linha usando a consulta:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
E compare as somas de verificação retornadas com os valores armazenados.