Как я могу отслеживать изменения в таблице базы данных SQL Server, не используя триггеры и не изменяя структуру базы данных каким-либо образом? Моя предпочтительная среда программирования - .NET и C #.
Я бы хотел иметь возможность поддерживать любой SQL Server 2000 SP4 или новее. Мое приложение - это визуализация данных для продукта другой компании. Наша клиентская база исчисляется тысячами, поэтому я не хочу предъявлять требования, чтобы мы изменяли таблицу сторонних поставщиков при каждой установке.
Под «изменения в таблице» Я имею в виду изменения в данных таблицы, а не изменения в структуре таблицы.
В конечном счете, я бы хотел, чтобы изменение вызвало событие в моем приложении, вместо того, чтобы проверять изменения с интервалом.
Наилучшим способом действий с учетом моих требований (без триггеров или изменений схемы, SQL Server 2000 и 2005), по-видимому, является использование функции BINARY_CHECKSUM
в T-SQL . Я планирую реализовать это так:
Каждые Х секунд запускаются следующие запросы:
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
И сравните это с сохраненным значением. Если значение изменилось, просматривайте таблицу строка за строкой, используя запрос:
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
И сравните возвращенные контрольные суммы с сохраненными значениями.