SQL dynamique dans une variable

Le
Oxiane
Bonjour,

je souhaiterais récupérer le résultat d'un ordre SQL dynamique dans une
variable.
Quelque chose du style


use northwind

declare @sql varchar(256)
declare @result varchar(256)

set @sql='select @result = count(*) from categories'
exec(@sql)

print @result


J'obtiens l'erreur "La variable '@result' doit être déclarée."


(l'exemple est simpliste et ne nécessite pas de sql dynamique, mais c'est
pour l'exemple)

Je dois avoir un problème de syntaxe, non ?


--
Cordialement

Oxiane
-
Omnia vanitas
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel Walsh
Le #11328791
Salut,


Il y a le problème d'étendue (scope). En t-sql, l'étendue par défaut
des variables est la "batch". Steve Dassin a déjà suggéré dans le passé
d'utiliser soit une table temporaire, soit d'utiliser sp_executesql. Non
testé, cela devrait ressembler à quelque chose dans le genre:



execute sp_executesql @sql, N'@result varchar(256) output'



au lieu du exec(@sql).




Espérant être utile,
Vanderghast, Access MVP



"Oxiane" news:
Bonjour,

je souhaiterais récupérer le résultat d'un ordre SQL dynamique dans une
variable.
Quelque chose du style


use northwind

declare @sql varchar(256)
declare @result varchar(256)

set @sql='select @result = count(*) from categories'
exec(@sql)

print @result


J'obtiens l'erreur "La variable '@result' doit être déclarée."


(l'exemple est simpliste et ne nécessite pas de sql dynamique, mais c'est
pour l'exemple)

Je dois avoir un problème de syntaxe, non ?


--
Cordialement

Oxiane
----------------------------------------------------------
Omnia vanitas





Oxiane
Le #11328781
Magnifique !!!

la syntaxe correcte est

execute sp_executesql @sql, N'@result varchar(256) output', @result
output

Merci beaucoup de m'avoir mis sur la piste (et maché 90% du travail !)

--
Cordialement

Oxiane
----------------------------------------------------------
Omnia vanitas
www.omniavanitas.com


"Michel Walsh" a écrit dans le message
de news:
Salut,


Il y a le problème d'étendue (scope). En t-sql, l'étendue par


défaut
des variables est la "batch". Steve Dassin a déjà suggéré dans le passé
d'utiliser soit une table temporaire, soit d'utiliser sp_executesql. Non
testé, cela devrait ressembler à quelque chose dans le genre:



execute sp_executesql @sql, N'@result varchar(256) output'



au lieu du exec(@sql).




Espérant être utile,
Vanderghast, Access MVP



"Oxiane" news:
> Bonjour,
>
> je souhaiterais récupérer le résultat d'un ordre SQL dynamique dans une
> variable.
> Quelque chose du style
>
>
> use northwind
>
> declare @sql varchar(256)
> declare @result varchar(256)
>
> set @sql='select @result = count(*) from categories'
> exec(@sql)
>
> print @result
>
>
> J'obtiens l'erreur "La variable '@result' doit être déclarée."
>
>
> (l'exemple est simpliste et ne nécessite pas de sql dynamique, mais


c'est
> pour l'exemple)
>
> Je dois avoir un problème de syntaxe, non ?
>
>
> --
> Cordialement
>
> Oxiane
> ----------------------------------------------------------
> Omnia vanitas
>
>
>




Publicité
Poster une réponse
Anonyme