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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Maxi
18/10/2006 - 14:22 | Informe spam
Hola, no, eso se refiere a que un Trigger esta haciendo alguna operacion en
alguna otra tabla que tambien tiene otro trigger, eso se lo denomina
anidamiento, fijate cual es el trigger y hace


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Geovanny Castillo" escribió en el mensaje
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
Respuesta Responder a este mensaje
#3 Alejandro Mesa
18/10/2006 - 15:04 | Informe spam
Geovanny Castillo,

Ademas de lo dicho por BitOne y Maxi, te recomiendo que chequees en el
servidor de origen como esta seteada la propiedad, posiblemente este apagada
en el servidor de origen y este prendida en el servidor final.

Busca el topico "How to set the nested triggers option (Enterprise Manager)
" en los BOL.

Tambien chequea la opcion "RECURSIVE_TRIGGERS" a nivel de db. Puedes ver
esta propiedad desde el EM, viendo las propiedades de la db y puedes
alterarla tambien desde QA usando la sentencia "alter database". Busca el
topico "Using Nested Triggers" en los BOL para mas info.


AMB

"Geovanny Castillo" wrote:

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

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida