Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Le niveau maximal d'imbrication des procédures stockées

6 réponses
Avatar
To
Bonjour a tous.
J'ai un petit soucis concernant une procédure stockée récursive. C'est tout
simple :
La PS s'appele plus de 32 fois ce qui a l'air de poser un probleme à SQL
Server. J'obtiens le message suivant :
Le niveau maximal d'imbrication des procédures stockées, des fonctions, des
déclencheurs ou des vues est dépassé (limite 32)

Cette limitation me parait tres contraignante, existe t'il un moyen de la
parametrer ou meme de la contourner.
Merci d'avance!!

Thibaut

6 réponses

Avatar
bruno reiter [MVP]
c'est non paramètrable et c'est déjà beaucoup, on teste avec @@nestlevel

br

"To" wrote in message news:dhbug2$13p$
Bonjour a tous.
J'ai un petit soucis concernant une procédure stockée récursive. C'est


tout
simple :
La PS s'appele plus de 32 fois ce qui a l'air de poser un probleme à SQL
Server. J'obtiens le message suivant :
Le niveau maximal d'imbrication des procédures stockées, des fonctions,


des
déclencheurs ou des vues est dépassé (limite 32)

Cette limitation me parait tres contraignante, existe t'il un moyen de la
parametrer ou meme de la contourner.
Merci d'avance!!

Thibaut




Avatar
Patrice
Vu la réponse de Bruno, cela te laisse comme solution de gérer la
récursivité toi-même ce qui est toujours possible...

Pour info, SQL Server 2005 propose une manière de gérer les requêtes
récursives...

Bon courage.
--
Patrice

"To" a écrit dans le message de
news:dhbug2$13p$
Bonjour a tous.
J'ai un petit soucis concernant une procédure stockée récursive. C'est


tout
simple :
La PS s'appele plus de 32 fois ce qui a l'air de poser un probleme à SQL
Server. J'obtiens le message suivant :
Le niveau maximal d'imbrication des procédures stockées, des fonctions,


des
déclencheurs ou des vues est dépassé (limite 32)

Cette limitation me parait tres contraignante, existe t'il un moyen de la
parametrer ou meme de la contourner.
Merci d'avance!!

Thibaut




Avatar
To
Merci a vous pour les reponses.
Comment peut on gerer la recursivité soi meme? Je ne vois pas trop le
concept...
Merci


"Patrice" a écrit dans le message de news:
e0HrR6$
Vu la réponse de Bruno, cela te laisse comme solution de gérer la
récursivité toi-même ce qui est toujours possible...

Pour info, SQL Server 2005 propose une manière de gérer les requêtes
récursives...

Bon courage.
--
Patrice

"To" a écrit dans le message de
news:dhbug2$13p$
Bonjour a tous.
J'ai un petit soucis concernant une procédure stockée récursive. C'est


tout
simple :
La PS s'appele plus de 32 fois ce qui a l'air de poser un probleme à SQL
Server. J'obtiens le message suivant :
Le niveau maximal d'imbrication des procédures stockées, des fonctions,


des
déclencheurs ou des vues est dépassé (limite 32)

Cette limitation me parait tres contraignante, existe t'il un moyen de la
parametrer ou meme de la contourner.
Merci d'avance!!

Thibaut








Avatar
Patrice
Les appels successifs empilent les valeurs sur la pile à chaque appel et les
désempilent à chaque retour. Il faudra donc gérer explicitement ce
mécanisme.

L'exemple académique de la factorielle par exemple est aussi simplement géré
par une boucle.

Dans des cas plus compliqué, je pense par exemple qu'une table qui
stockerait les valeurs pour chaque niveau d'appel permettrait de gérer cela
dans la boucle (en gros c'est un tableau qui permet de garder les résultats
et de simuler cette "pile").

--
Patrice

"To" a écrit dans le message de
news:dhdht1$pfl$
Merci a vous pour les reponses.
Comment peut on gerer la recursivité soi meme? Je ne vois pas trop le
concept...
Merci


"Patrice" a écrit dans le message de news:
e0HrR6$
> Vu la réponse de Bruno, cela te laisse comme solution de gérer la
> récursivité toi-même ce qui est toujours possible...
>
> Pour info, SQL Server 2005 propose une manière de gérer les requêtes
> récursives...
>
> Bon courage.
> --
> Patrice
>
> "To" a écrit dans le message de
> news:dhbug2$13p$
>> Bonjour a tous.
>> J'ai un petit soucis concernant une procédure stockée récursive. C'est
> tout
>> simple :
>> La PS s'appele plus de 32 fois ce qui a l'air de poser un probleme à


SQL
>> Server. J'obtiens le message suivant :
>> Le niveau maximal d'imbrication des procédures stockées, des fonctions,
> des
>> déclencheurs ou des vues est dépassé (limite 32)
>>
>> Cette limitation me parait tres contraignante, existe t'il un moyen de


la
>> parametrer ou meme de la contourner.
>> Merci d'avance!!
>>
>> Thibaut
>>
>>
>
>




Avatar
To
Ok merci pour les réponses, je vais essayer ça!

thibaut

"Patrice" a écrit dans le message de news:

Les appels successifs empilent les valeurs sur la pile à chaque appel et
les
désempilent à chaque retour. Il faudra donc gérer explicitement ce
mécanisme.

L'exemple académique de la factorielle par exemple est aussi simplement
géré
par une boucle.

Dans des cas plus compliqué, je pense par exemple qu'une table qui
stockerait les valeurs pour chaque niveau d'appel permettrait de gérer
cela
dans la boucle (en gros c'est un tableau qui permet de garder les
résultats
et de simuler cette "pile").

--
Patrice

"To" a écrit dans le message de
news:dhdht1$pfl$
Merci a vous pour les reponses.
Comment peut on gerer la recursivité soi meme? Je ne vois pas trop le
concept...
Merci


"Patrice" a écrit dans le message de news:
e0HrR6$
> Vu la réponse de Bruno, cela te laisse comme solution de gérer la
> récursivité toi-même ce qui est toujours possible...
>
> Pour info, SQL Server 2005 propose une manière de gérer les requêtes
> récursives...
>
> Bon courage.
> --
> Patrice
>
> "To" a écrit dans le message de
> news:dhbug2$13p$
>> Bonjour a tous.
>> J'ai un petit soucis concernant une procédure stockée récursive. C'est
> tout
>> simple :
>> La PS s'appele plus de 32 fois ce qui a l'air de poser un probleme à


SQL
>> Server. J'obtiens le message suivant :
>> Le niveau maximal d'imbrication des procédures stockées, des
>> fonctions,
> des
>> déclencheurs ou des vues est dépassé (limite 32)
>>
>> Cette limitation me parait tres contraignante, existe t'il un moyen de


la
>> parametrer ou meme de la contourner.
>> Merci d'avance!!
>>
>> Thibaut
>>
>>
>
>








Avatar
Fred BROUARD
Bonjour,

le concept de récursivité dans une base de données est EXTREMEMENT DANGEREUX car
susceptible de faire "péter la mémoire" et donc de planter le serveur. Or les
SGBDR ont un impératif majeur : la très haute disponibilité (un programme qui
pète c'est pas grave..., un serveur de données qui plante ça peut faire perdre
BEAUCOUP de CA à un site web marchand !!!)

Voila pourquoi la récursivité est limité dans MS SQL Sever et à tous les niveaux :
1) au niveau procédural à 32 appels imbriqués (SQL Server 2000 et avant)
2) au niveau SQL via les CTE à 100 appels imbriqués, voir plus car modifiable
(SQL Server 2005)
Mais cela n'est JAMAIS illimité pour les raisons évoquées ci dessus.
A mon sens d'ailleurs, la récursivité devrait être interdite dans un SGBDR !

De toute façon, la récursivité peut systématiquement être remplacée par un
mécanisme itératif avec gestion d'une pile.

Pour plus d'information, lire l'article que j'ai écrit sur la récursivité de SQL :
http://www.sqlservercentral.com/columnists/fBROUARD/recursivequeriesinsql1999andsqlserver2005.asp
Il va paraître en français dans SQL Sever magazine.

Si c'est une aborescence que vous voulez gérer dans vos données, alors lisez cet
article : http://sqlpro.developpez.com/cours/arborescence/

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

To a écrit:
Bonjour a tous.
J'ai un petit soucis concernant une procédure stockée récursive. C'est tout
simple :
La PS s'appele plus de 32 fois ce qui a l'air de poser un probleme à SQL
Server. J'obtiens le message suivant :
Le niveau maximal d'imbrication des procédures stockées, des fonctions, des
déclencheurs ou des vues est dépassé (limite 32)

Cette limitation me parait tres contraignante, existe t'il un moyen de la
parametrer ou meme de la contourner.
Merci d'avance!!

Thibaut