Как добавить столбец "последний обновленный" в таблице SQL Server 2008 R2?
У меня есть таблица в моей базе данных SQL Server 2008 R2 и хотел бы добавить столбец LastUpdated, который будет автоматически изменяться каждый раз, когда строка обновляется. Таким образом, я могу видеть, когда обновлялась каждая отдельная строка.
Похоже, что SQL Server 2008 R2 не имеет типа данных для обработки этого, как это делали предыдущие версии, поэтому я не уверен, что это лучший способ сделать это. Я задавался вопросом об использовании триггера, но что произойдет, когда триггер обновит строку? Будет ли это срабатывать снова и т.д.?
Ответы
Ответ 1
Чтобы узнать, какая строка была обновлена последним, вам нужно создать новый столбец типа DATETIME
/DATETIME2
и обновить его с помощью триггера. Нет типа данных, который автоматически обновляется с информацией о дате/времени каждый раз, когда строка обновляется.
Чтобы избежать рекурсии, вы можете использовать предложение UPDATE()
внутри триггера, например.
ALTER TRIGGER dbo.SetLastUpdatedBusiness
ON dbo.Businesses
AFTER UPDATE -- not insert!
AS
BEGIN
IF NOT UPDATE(LastUpdated)
BEGIN
UPDATE t
SET t.LastUpdated = CURRENT_TIMESTAMP -- not dbo.LastUpdated!
FROM dbo.Businesses AS t -- not b!
INNER JOIN inserted AS i
ON t.ID = i.ID;
END
END
GO
Ответ 2
Это не так просто, к сожалению.
Вы можете добавить новое поле DATETIME
(или DATETIME2
) в свою таблицу, и вы можете дать ему ограничение по умолчанию GETDATE()
-, которое установит значение при вставке новой строки.
К сожалению, кроме создания триггера AFTER UPDATE
, нет возможности "из коробки" постоянно обновлять его. Триггер как таковой не сложно записать, но вам придется писать его для каждой и каждой отдельной таблицы, которая имеет эту функцию.....