Microsoft SQL Server
Transact-SQL

Триггеры INSERT на таблицы с ключевым IDENTITY полем.

Опубликовано: 30 ноя 05
Рейтинг:

Автор: 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)

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Microsoft SQL Server / Transact-SQL / Триггеры INSERT на таблицы с ключевым IDENTITY полем.