Error al grabar un trigger

18/10/2006 - 01:37 por Geovanny Castillo | Informe spam
Que tal amigos:

Copié una bdd de un servidor a otro, esta bdd original tiene varios trigger.

Al subirle a otro servidor obtengo el siguiente mensaje de error:


Se superó el nivel máximo de anidamiento de vistas, procedimientos
almacenados, funciones o desencadenadores (límite 32).

A que se refiere esto: a que solo puedo tener 32 triggers?.

La tabla en la que aparece el error tiene 38 columnas nomás. Y donde
actua el trigger es en la 32.

No se que puede ser.

Gracias por su ayuda
 

Leer las respuestas

#1 BitOne®
18/10/2006 - 05:47 | Informe spam
Algunas veces los trigger se hacen un poco complicado y dificil de manejar.
se debe de tener mucho cuidado y bien claro lo que se esta haciendo con
ellos pues pueden ser un arma de doble filo.

esto viene dado a que mas de un trigger puede estar haciendo referencia a la
misma tabla en cuestiones de insercciones o actualizaciones y
hacerse un bucle que sobre pase el limite de anidamiento el cual es 32,
debes revisar dichos trigger a ver si uno de ellos esta actualizando
la tabla o insertando en dicha tabla a la cual el apunta.

un ejemplo de esto seria que tengas una tabla de empleado la cual contiene
un trigger de la siguiente manera:


use northwind
if object_id('trg_freight','tr') is not null
drop trigger trg_freight
go
create trigger trg_freight
on orders
for insert, update, delete
as

declare @orderid int

if exists ( select * from inserted where freight > 12 )
begin
set @orderid = (select orderid from inserted )
update orders
set freight = freight + 1
where orderid = @orderid
end
go


use northwind
if object_id('trg_freight1','tr') is not null
drop trigger trg_freight1
go
create trigger trg_freight1
on orders
for insert, update, delete
as

declare @orderid int

if exists ( select * from inserted where freight > 12 )
begin
set @orderid = (select orderid from inserted )
update orders
set freight = freight + 1
where orderid = @orderid
end
go


al ejecutar este update sucedera un error:


update orders
set freight = freight + 1
where orderid = 10248


como este:

Server: Msg 217, Level 16, State 1, Procedure trg_freight1, Line 11
Maximum stored procedure, function, trigger, or view nesting level exceeded
(limit 32).


O sea solo tienes que revisar o postear tu codigo de cada uno de los
triggers en este forum e intentaremos ayudarte en la medida de lo posible.

O ve a la ayuda en linea a desencadenadores definidos por el usuairo.

Saludos,


BitOne®
www.yocsql.com






"Geovanny Castillo" wrote in message
news:
Que tal amigos:

Copié una bdd de un servidor a otro, esta bdd original tiene varios


trigger.

Al subirle a otro servidor obtengo el siguiente mensaje de error:


Se superó el nivel máximo de anidamiento de vistas, procedimientos
almacenados, funciones o desencadenadores (límite 32).

A que se refiere esto: a que solo puedo tener 32 triggers?.

La tabla en la que aparece el error tiene 38 columnas nomás. Y donde
actua el trigger es en la 32.

No se que puede ser.

Gracias por su ayuda

Preguntas similares