Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с триггером / 4 сообщений из 4, страница 1 из 1
20.08.2002, 11:16:25
    #32044464
IT-4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером
Создал таблицу
create table MG
(
Meneger int identity(1,1) not null, {Primary key}
Zone smallint not null,
Account char(30),
System_Time datetime
)
Создал триггер для неё
create trigger TRG_INS_MG
on MG
for insert, update
as
begin
update M set M.Account=System_user, M.System_Time=getdate()
from inserted i inner join MG M on i.Menager=M.Menager
end
при внесении записи выдает ошибку
Server: Msg 217, Level 16, State 1, Procedure TRG_INS_AG, Line 6
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).

Подскажите новечку
Зарание благодарен!!!
...
Рейтинг: 0 / 0
20.08.2002, 11:40:30
    #32044476
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером
Проверь что делает триггер TRG_INS_AG, судя по всему он тоже что то обновляет в твоей таблице чем вызывает вновь запуск триггера TRG_INS_MG.
В свойствах сервера отключи возможность вложенных триггеров (nested triggers), только прежде подумай, может тебе будут нужны вложенные триггера, тогда придется более аккуратно писать код.
...
Рейтинг: 0 / 0
20.08.2002, 12:00:40
    #32044487
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером
Триггер конечно-же рекурсивный - сам изменяет таблицу MG таким образом вызывая себя повторно. Действительно можно отключить Nested Triggers, можно использовать например временные таблицы для проверки повторной входимости, а можно воспользоваться уже готовым:
Examples
A. Test nesting level of a specific trigger
IF ( (SELECT trigger_nestlevel( object_ID('xyz') ) ) > 5 )
RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)

B. Test nesting level of all triggers executed
(BOL->TRIGGER_NESTLEVEL)
...
Рейтинг: 0 / 0
20.08.2002, 12:11:39
    #32044491
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером
Конечно, триггер изменяет свою же таблицу, а значит вновь срабатывает.
Можно поступить следующим образом:
Создать отдельно триггер на Insert и отдельно на Update. В триггере на Update использовать кострукцию IF UPDATE ( column ) чтобы установить изменялись ли столбцы system_user и system_time. Если в триггере более сложная обработка, чем Вы написали - внесите ее в SP, а из триггеров эту SP вызывайте (такимобразом не надо будет дублировать большой код в два триггера).

Еще можно использовать Instead of trigger, добавив в него в конце саму операцию добавления/изменения
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с триггером / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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