2013-05-23 2 views
0

Я использую SQL Server 2012. Мне нужно отслеживать все строки, которые были обновлениями (как часть любого действия), сделанные в таблице.обновлять значение столбца каждый раз, когда обновление производится в строке

Я думал добавить новый столбец (название столбца: «LastUpdated» типа Datetime.) К таблице, которую я хочу отслеживать. Я хотел бы обновить значение LastUpdated каждый раз, когда в эту строку добавляется обновление. Есть ли конкретный способ выполнить эту задачу?

+3

Вы смотрите на триггеры? – Mikeb

ответ

2

вы могли бы создать триггер. Например:

CREATE TRIGGER dbo.Table1_Updated 
ON dbo.Table1 
FOR UPDATE /* Fire this trigger when a row is UPDATEd */ 
AS BEGIN 
    UPDATE dbo.Table1 SET dbo.Table1.LastUpdated = GETDATE() 
    FROM INSERTED 
    WHERE inserted.id=Table1.id 
END 

Однако этот триггер не будет хранить обновление WHAT. Также имейте в виду, что если два человека обновят его, у вас будет только дата последнего обновления (не все обновления).

Чтобы сохранить историю во всех изменениях, вам может потребоваться создать таблицу аудита (почти идентичную структуру для существующей таблицы) и использовать триггер для копирования данных предварительного обновления в таблицу аудита. В этой статье о твердом подходе: Using table auditing in order to have "snapshots" of table

0

Мы внедрили систему, аналогичную следующей:

  • Добавить новый столбец в таблицу LastUpdatedDate с типом данных DateTime
  • При необходимости добавьте еще один столбец с LastUpdatedBy с типом данных varchar(100) или какая длина вам нужна

В этом хранилище будут указаны дата и время и кто выполнил обновление.

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

update yourtable 
set yourCol = 'newValue', 
    LastUpdatedDate = getdate(), 
    LastUpdatedBy = 'yourUserIdentifier' 
+0

Будьте очень осторожны, используя локальную дату/время. Правительствам нравится настраивать их туда и обратно, часто на час два раза в год. Это может вызвать некоторые интересные проблемы. – HABO

1

Вы бы хотели посмотреть в создании триггера огонь по обновлению

Create TRIGGER Trigger_Name ON Table_Name 
FOR update 
AS 
BEGIN 

// update lastupdated column of updated record with current date and or time 

END 

Alliteratively вы могли бы просто передать новое значение для LastUpdated при обновлении других полей

Смежные вопросы