OVH Cloud OVH Cloud

appel d'une procédure stokée récursivement

7 réponses
Avatar
Zoury
Bonjour! :O)


Je sais qu'il est possible d'appeler une procédure stockée résursivement (du
moins avec SQL Server 2000.. je ne sais pas pour les autres versions)

exemple (non testé) :
---
create procedure sp_printnum(@i int)
as
if (@i <= 5)
begin
print @i
set @i = @i + 1
exec sp_printnum @i
end
go
---

sauf que lorsque l'on exécute le script ci-haut, on obtient un message
disant qu'aucun ajout n'a été fait à la table sysdepends parce que la
procédure sp_printnum n'a pu être trouvé (ce qui est normal il me semble
:OD)...

J'aimerais savoir si cette avertissement pourrait causer des complications à
la longue ?

--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic

7 réponses

Avatar
bruno reiter [MVP]
il avertit simplement mais il a dû créer comme ça

tu peux tester l'imbrication (limitée à 32) avec @@nestlevel

br

"Zoury" wrote in message
news:#
Bonjour! :O)


Je sais qu'il est possible d'appeler une procédure stockée résursivement


(du
moins avec SQL Server 2000.. je ne sais pas pour les autres versions)

exemple (non testé) :
---
create procedure sp_printnum(@i int)
as
if (@i <= 5)
begin
print @i
set @i = @i + 1
exec sp_printnum @i
end
go
---

sauf que lorsque l'on exécute le script ci-haut, on obtient un message
disant qu'aucun ajout n'a été fait à la table sysdepends parce que la
procédure sp_printnum n'a pu être trouvé (ce qui est normal il me semble
:OD)...

J'aimerais savoir si cette avertissement pourrait causer des complications


à
la longue ?

--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic




Avatar
Zoury
parfait merci! je venais tout juste de tomber sur @@nestlevel... ça va
surement me servir ;O)

--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic
Avatar
Sylvain Lafontaine
Ce n'est pas une très bonne idée d'appeler des procédures stockées
récursivement; vous devriez utiliser les fonctions à la place si possible.

À chaque appel à une PS est associée la création d'un Rowset; qui sont des
structures assez lourdes à gérer en mémoire; sans oublier la gérance de leur
association avec le retour d'un éventuel Recordset.

S. L.

"Zoury" wrote in message
news:
parfait merci! je venais tout juste de tomber sur @@nestlevel... ça va
surement me servir ;O)

--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic




Avatar
Zoury
c'est noté, merci. :O)

--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic
Avatar
Steve Kass
Zoury,

Vous pouver élimier le message comme le suit:

create procedure sp_printnum(@i int)
as
print @i
go

alter procedure sp_printnum(@i int)
as
if (@i <= 5)
begin
print @i
set @i = @i + 1
exec sp_printnum @i
end
go

exec sp_printnum 4
go

drop proc sp_printnum

Steve Kass
Drew University

Zoury wrote:

Bonjour! :O)


Je sais qu'il est possible d'appeler une procédure stockée résursivement (du
moins avec SQL Server 2000.. je ne sais pas pour les autres versions)

exemple (non testé) :
---
create procedure sp_printnum(@i int)
as
if (@i <= 5)
begin
print @i
set @i = @i + 1
exec sp_printnum @i
end
go
---

sauf que lorsque l'on exécute le script ci-haut, on obtient un message
disant qu'aucun ajout n'a été fait à la table sysdepends parce que la
procédure sp_printnum n'a pu être trouvé (ce qui est normal il me semble
:OD)...

J'aimerais savoir si cette avertissement pourrait causer des complications à
la longue ?





Avatar
Zoury
hehe! simple et efficace. :O)

merci.

--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic
Avatar
Sylvain Lafontaine
Vous pouvez aussi essayer de mettre le nom de votre fonction dans une chaîne
de caractères; quelque chose du genre:

exec "sp_printnum @i" (pas testé)

Cependant, cela va empêcher une pre-compilation efficace du code.

S. L.

"Zoury" wrote in message
news:umUdi3$
hehe! simple et efficace. :O)

merci.

--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic