Отслеживание изменений таблицы MSSQL 2008, какой метод лучше? - PullRequest
2 голосов
/ 28 сентября 2011

Мне нужно отслеживать изменения записей в одной таблице MSSQL из приложения .NET 4.0. Какой лучший способ сделать это?

Подробнее о приложении. У нас есть таблица членства, которая обновляется из приложения № 1. Мы также разрабатываем приложение № 2, которое должно отслеживать таблицу членства и отправлять уведомления по электронной почте об определенных изменениях данных членства.

Ответы [ 4 ]

7 голосов
/ 28 сентября 2011

Для изменений DML: В SQL Server 2008 для этой цели предусмотрена встроенная функция: Сбор данных изменений .

Для DDLизменения: Начиная с SQL Server 2005, у вас есть триггеры DDL , Пример

3 голосов
/ 28 сентября 2011

Если у вас есть таблица истории (таблица с такими же столбцами, что и исходная таблица, плюс столбец идентификатора с автоматическим приращением), вы можете отслеживать все изменения в исходной таблице. Вы можете отслеживать вставки, удаления и каждое изменение. Используйте триггеры для вставки, обновления и удаления, чтобы поместить строку в таблицу истории. Если вам не нужны все эти опции, используйте те, которые вам нужны.

Если вы решите использовать флаг IsDeleted в исходной таблице, это усложняет каждый запрос и оставляет вашу активную таблицу с большим количеством ненужных строк. Но это может работать, в зависимости от ваших потребностей.

проверьте эту ссылку .. для получения дополнительной информации .... http://www.codeproject.com/KB/database/DTS_SQLExpress.aspx

1 голос
/ 28 сентября 2011

Я думаю, что вам нужно это сделать.

Создать триггер для таблиц SQL, который будет создавать файл в одной папке при каждом обновлении данных.

Создать FileSystemWatcher в Приложениях 1 и 2., которые будут отслеживать эту папку.

В функции обратного вызова FileWatcher напишите код для отправки уведомлений по электронной почте.

0 голосов
/ 09 января 2016

Используйте класс с открытым исходным кодом SqlDependencyEx .Его довольно легко настроить и использовать:

// See constructor optional parameters to configure it according to your needs
var listener = new SqlDependencyEx(connectionString, "YourDatabase", "YourTable");

// e.Data contains actual changed data in the XML format
listener.TableChanged += (o, e) => Console.WriteLine("Your table was changed!");

// After you call the Start method you will receive table notifications with 
// the actual changed data in the XML format
listener.Start();

// ... Your code is here 

// Don't forget to stop the listener somewhere!
listener.Stop();

Надеюсь, это поможет.

...