Как отследить количество изменений, произошедших в столбце? T-SQL - SQL Server - PullRequest
1 голос
/ 29 апреля 2010

Например, у меня есть столбец с именем EmployeeName.

Каждый раз, когда пользователь меняет / исправляет свое имя, мне нужно вести счет. Если он дважды меняет свое имя, то число равно 2. Кроме того, мне нужно хранить время каждого изменения, которое сотрудник вносит в EmployeeName, например. если имя, по сути, Джеймс, а созданное время - 9:00 утра, а затем сотрудник переходит на Джона в 11:00 утра, мне нужно сохранить это новое время и новое значение, а также предыдущее значение - Джеймс в 9:00 утра .

Надеюсь, все ясно! Спасибо, ребята ... Лучший ответ будет выбран ...

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

Ответы [ 3 ]

2 голосов
/ 29 апреля 2010

Сначала - если это еще не сделано, настоятельно рекомендуется, чтобы сотрудники идентифицировались по постоянному идентификатору (т.е. НЕ EmployeeName), и поэтому вы можете отслеживать все.

Если вы хотите использовать триггер, вы можете использовать триггер AFTER UPDATE и искать изменение имени, используя if update(EmployeeName).

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

Затем вы добавили бы строку в таблицу истории имен вашего сотрудника, в которой содержатся сведения об этом изменении с текущей отметкой времени.

1 голос
/ 29 апреля 2010

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

0 голосов
/ 29 апреля 2010

В SQL Server 2008 у вас есть новая функция захвата данных изменений, вы можете использовать ее для получения количества изменений плюс внесенные изменения: http://weblogs.sqlteam.com/derekc/archive/2008/01/28/60469.aspx

Пример кода Northwind, так как ссылки могут со временем исчезнуть:

EXEC Sp_cdc_enable_table 
  humanresources , 
  employee , 
  'HumanResources_Employee' , 
  1 , 
  dbo 


UPDATE humanresources.employee 
SET    ContactId = 1 
WHERE  employeeid = 1 

DECLARE @begin_lsn BINARY(10), @end_lsn BINARY(10)

SELECT @begin_lsn = sys.fn_cdc_get_min_lsn('humanresources_employee')
SELECT @end_lsn = sys.fn_cdc_get_max_lsn()

SELECT * FROM cdc.fn_cdc_get_all_changes_humanresources_employee(@begin_lsn, @end_lsn, 'all');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...