powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Правильный триггер
6 сообщений из 6, страница 1 из 1
Правильный триггер
    #32069269
Стрелок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу триггер для аудита (например на инсерт в таблицу А). В триггере идет инсерт в аудитную таблицу, а запросы вызывающие триггер имеют вид:
insert A values (...)
select @id=@@identity
insert B values (@id,...)

легко видеть что после триггера значение @@identity изменится. Как правильно написать триггер в этом случае? (запросы на инсерт в таблицу А исправлять нельзя, так как их написаль разработчики)
...
Рейтинг: 0 / 0
Правильный триггер
    #32069271
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я неуверен, что понял в чем проблема, но:
Не используйте identity rows, т.е. пишите свой генератор следующего ключа
...
Рейтинг: 0 / 0
Правильный триггер
    #32069272
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что должно получиться?!
...
Рейтинг: 0 / 0
Правильный триггер
    #32069294
Стрелок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не использовать identity rows не поможет, так как при инсерте в такую таблицу предыдущее значение @@IDENTITY cбрасывается.
2 3JIA9I CyKA. может я криво пояснил, должно быть так:
в таблицу В вставляется @@IDENTITY из А, а получается что значение @@IDENTITY изменяется в триггере.
...
Рейтинг: 0 / 0
Правильный триггер
    #32069326
VAT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была тема. @@identity в инсерте в триггере на инсерт меняется. SCOPE_IDENTITY( ) можно
...
Рейтинг: 0 / 0
Правильный триггер
    #32069341
Фотография Белов Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@@IDENTITY возвращает последнее значение для идентити для таблицы для всех пользователей
SCOPE_IDENITY() - возвращает значение последнее идентити в текущей сессии. Поэтому, ИМХО, триггрер должен выглядеть так
Код: plaintext
1.
2.
3.
insert into A values (...)
select @id = scope_idenity()
insert into B values(@id,...)

И на будущее совет - в select, insert лучше явно перечислять поля
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Правильный триггер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]