Recursividad de procedimientos almacenados

14/04/2004 - 12:56 por Pedro J. | Informe spam
Hola:

Tengo un problema grave y es el como poder solucionar el error
"Maximum stored procedure, function, trigger, or view nesting level exceeded
(limit 32)". Este error se produce en un procedimiento almacenado que a su
vez llama a otro que a su vez llama a otro que a su vez llama al primero, no
se trata de un error de lógica, ya que la recursividad de estos
procedimientos es necesaria y el error no se produce siempre, sólo se
produce cuando la recursividad es "excesiva" para el SQL.
¿hay algo en el SQL que pueda configurar para que aumente el nivel de
recursividad para poder solucionar esto?.

Muchas gracias.

Pedro J.

Preguntas similare

Leer las respuestas

#1 Tako
14/04/2004 - 13:06 | Informe spam
La profundidad máxima que admite SQLServer es de 32, tendrás que mirar
si superas esa cifra y si es así tendrás que cambiar el algoritmo bien por
otro recursivo que no supera esa cifra bien por otro iterativo.

Te copio de los libros en pantalla por si te sirve:

Los procedimientos almacenados se anidan cuando un procedimiento almacenado
llama a otro. Puede anidar hasta 32 niveles de procedimientos almacenados.
El nivel de anidamiento aumenta en uno cuando el procedimiento almacenado al
que se ha llamado empieza a ejecutarse, y disminuye en uno cuando finaliza
su ejecución. Si se intenta superar el límite máximo de 32 niveles de
anidamiento, se producirá un error general en la cadena del procedimiento
almacenado que realiza la llamada. El nivel actual de anidamiento de los
procedimientos almacenados en ejecución se almacena en la función
@@NESTLEVEL.

"Pedro J." wrote in message
news:
Hola:

Tengo un problema grave y es el como poder solucionar el error
"Maximum stored procedure, function, trigger, or view nesting level


exceeded
(limit 32)". Este error se produce en un procedimiento almacenado que a su
vez llama a otro que a su vez llama a otro que a su vez llama al primero,


no
se trata de un error de lógica, ya que la recursividad de estos
procedimientos es necesaria y el error no se produce siempre, sólo se
produce cuando la recursividad es "excesiva" para el SQL.
¿hay algo en el SQL que pueda configurar para que aumente el nivel de
recursividad para poder solucionar esto?.

Muchas gracias.

Pedro J.


Respuesta Responder a este mensaje
#2 Carlos Sacristan
14/04/2004 - 13:09 | Informe spam
Me parece que tendrás que replantearte el código de ejecutas, porque no
hay forma de aumentar el nivel máximo de anidamiento (echa un vistazo al
tema "Anidar procedimientos almacenados" de los BOL)



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Pedro J." escribió en el mensaje
news:
Hola:

Tengo un problema grave y es el como poder solucionar el error
"Maximum stored procedure, function, trigger, or view nesting level


exceeded
(limit 32)". Este error se produce en un procedimiento almacenado que a su
vez llama a otro que a su vez llama a otro que a su vez llama al primero,


no
se trata de un error de lógica, ya que la recursividad de estos
procedimientos es necesaria y el error no se produce siempre, sólo se
produce cuando la recursividad es "excesiva" para el SQL.
¿hay algo en el SQL que pueda configurar para que aumente el nivel de
recursividad para poder solucionar esto?.

Muchas gracias.

Pedro J.


Respuesta Responder a este mensaje
#3 Rubén Vigón
14/04/2004 - 13:10 | Informe spam
Creo que 32 es el límite por diseño (tanto para SQL Server 7.0 como para SQL Server 2000) y no se puede aumentar; según los BOL de SQL Server 2000:

[...] Especificaciones de capacidad máxima:
Niveles de procedimientos almacenados anidados: 32
Subconsultas anidadas: 32
Niveles de desencadenadores anidados: 32

[...] Anidar procedimientos almacenados:
Los procedimientos almacenados se anidan cuando un procedimiento almacenado llama a otro. Puede anidar hasta 32 niveles de procedimientos almacenados. El nivel de anidamiento aumenta en uno cuando el procedimiento almacenado al que se ha llamado empieza a ejecutarse, y disminuye en uno cuando finaliza su ejecución. Si se intenta superar el límite máximo de 32 niveles de anidamiento, se producirá un error general en la cadena del procedimiento almacenado que realiza la llamada. El nivel actual de anidamiento de los procedimientos almacenados en ejecución se almacena en la función @@NESTLEVEL.
Aunque el límite de anidamiento es de 32 niveles, Microsoft® SQL ServerT no establece límites con respecto al número de procedimientos almacenados que pueden invocarse a partir de un procedimiento almacenado determinado, siempre que los procedimientos subordinados no llamen a otros procedimientos subordinados y no se supere nunca el nivel máximo de anidamientos

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
Respuesta Responder a este mensaje
#4 Adrian D. Garcia
14/04/2004 - 13:41 | Informe spam
No, ese es el limite maximo de anidamiento/recursividad que soporta SQL
Server. Creo que vas a tener que cambiar de alguna forma el algoritmo que
estas utilizando.

Saludos

Adrian D. Garcia
NDSoft
MCSD
"Pedro J." escribió en el mensaje
news:
Hola:

Tengo un problema grave y es el como poder solucionar el error
"Maximum stored procedure, function, trigger, or view nesting level


exceeded
(limit 32)". Este error se produce en un procedimiento almacenado que a su
vez llama a otro que a su vez llama a otro que a su vez llama al primero,


no
se trata de un error de lógica, ya que la recursividad de estos
procedimientos es necesaria y el error no se produce siempre, sólo se
produce cuando la recursividad es "excesiva" para el SQL.
¿hay algo en el SQL que pueda configurar para que aumente el nivel de
recursividad para poder solucionar esto?.

Muchas gracias.

Pedro J.


Respuesta Responder a este mensaje
#5 Maximiliano D. A.
14/04/2004 - 16:24 | Informe spam
Hola, deberias repensar la cosa!! 32 es el maximo que podes (por lo menos
hasta esta version ;-))

Bye


Salu2
Maxi

Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET

MSN:
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Pedro J." escribió en el mensaje
news:
Hola:

Tengo un problema grave y es el como poder solucionar el error
"Maximum stored procedure, function, trigger, or view nesting level


exceeded
(limit 32)". Este error se produce en un procedimiento almacenado que a su
vez llama a otro que a su vez llama a otro que a su vez llama al primero,


no
se trata de un error de lógica, ya que la recursividad de estos
procedimientos es necesaria y el error no se produce siempre, sólo se
produce cuando la recursividad es "excesiva" para el SQL.
¿hay algo en el SQL que pueda configurar para que aumente el nivel de
recursividad para poder solucionar esto?.

Muchas gracias.

Pedro J.







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.655 / Virus Database: 420 - Release Date: 08/04/2004
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida