SQL вставка только что отредактированных записей в таблицу
Прошу вашей помощи в работе с триггерами.
Есть база данных, состоящая из двух таблиц: реестр и история изменений. Мне необходимо создать триггер, который при изменении записи в реестре добавлял бы эту же запись в таблицу истории. Триггер after update я написал, но он вставляет все содержащиеся в реестре записи, а не только измененную.
Возможно ли так написать триггер, чтобы при обновлении реестра в историю вставлялась только обновленная запись (может это делается через Where)? Заранее благодарю.
Вот текущий код, который вставляет все записи, а не только отредактированную:
ALTER TRIGGER [dbo].[ReestrTrigger]
ON [dbo].[Реестр]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.История_записей (Дата_записи,Время_записи,Инв_номер,Статус) SELECT GETDATE(),CURRENT_TIMESTAMP,Инв_номер,Статус FROM dbo.Реестр;
END
Ответы (2 шт):
Для этих целей лучше использовать темпоральные таблицы.
Тут можно посмотреть про них.
В MS SQL предусмотрены две специальные временные таблицы, доступные только из триггеров: inserted и deleted
В триггерах на update таблица inserted содержит новые версии всех измененных строка, а deleted — старые.
В вашем случае код получается такой:
ALTER TRIGGER [dbo].[ReestrTrigger]
ON [dbo].[Реестр]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.История_записей (Дата_записи,Время_записи,Инв_номер,Статус)
SELECT GETDATE(),CURRENT_TIMESTAMP,Инв_номер,Статус
FROM inserted;
END