Рейтинг:
Автор: Slider_spb
Прислал: Иванцов Андрей
Многие для таблиц с ключевым IDENTITY полем используют внутри INSERT триггеров свои вставки (например, при ведении лога изменений), и потом замечают, что такие таблицы либо неправильно отображаются после добавления (например, в Access), или возникают другие ошибки. Суть проблемы в том, что внешние по отношении к триггеру программы пытаются получить @@IDENTITY последней добавленной записи, а при осуществлении добавления записи любой таблицы внутри триггера это значение заменяется новым. Чтобы избежать этих проблем, рекомендуется запоминать последнее значение @@IDENTITY в начале работы триггера и возвращать его в конце. Это можно осуществить следующим способом (одно из решений):
CREATE TRIGGER Trigger_Table ON [Street] FOR INSERT AS SET NOCOUNT ON -- запоминаем последнее значение @@Identity Declare @LastIdent Int, @s as varchar(255) Set @LastIdent = @@Identity -- лог добавленных записей INSERT INTO [_Change_History_Table] select *, 'Добавлено' as [Событие], getdate() as [Дата] from inserted -- восстанавливаем значение @@Identity set @s = 'SELECT Identity(Int, ' + CAST(@LastIdent as varchar(10)) + ', 1 ) as i INTO #_T' EXEC (@s)
Комментарии