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 шт):

Автор решения: Vitaliy Zlobin

Для этих целей лучше использовать темпоральные таблицы.

Тут можно посмотреть про них.

→ Ссылка
Автор решения: Герман Борисов

В 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
→ Ссылка