|
|
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Создал таблицу 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). Подскажите новечку Зарание благодарен!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 11:16:25 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Проверь что делает триггер TRG_INS_AG, судя по всему он тоже что то обновляет в твоей таблице чем вызывает вновь запуск триггера TRG_INS_MG. В свойствах сервера отключи возможность вложенных триггеров (nested triggers), только прежде подумай, может тебе будут нужны вложенные триггера, тогда придется более аккуратно писать код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 11:40:30 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Триггер конечно-же рекурсивный - сам изменяет таблицу 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 12:00:40 |
|
||
|
Проблема с триггером
|
|||
|---|---|---|---|
|
#18+
Конечно, триггер изменяет свою же таблицу, а значит вновь срабатывает. Можно поступить следующим образом: Создать отдельно триггер на Insert и отдельно на Update. В триггере на Update использовать кострукцию IF UPDATE ( column ) чтобы установить изменялись ли столбцы system_user и system_time. Если в триггере более сложная обработка, чем Вы написали - внесите ее в SP, а из триггеров эту SP вызывайте (такимобразом не надо будет дублировать большой код в два триггера). Еще можно использовать Instead of trigger, добавив в него в конце саму операцию добавления/изменения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 12:11:39 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1820999]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
85ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 408ms |

| 0 / 0 |
