2009-06-08 11 views
1

Existe-t-il un moyen d'obtenir dynamiquement une valeur d'une variable locale spécifiée par son nom dans SQL Server SP?Récupère dynamiquement une valeur d'une variable dans SQL Server SP

declare @foo int 
declare @bar int 

declare @variable_name varchar(10) 
set @variable_name = '@foo' 

print -- magic happens here - how to print the value of the variable 
     -- which name is stored in @variable_name, in this case @foo 

eval ne sera pas utile car il n'a pas accès aux variables locales du champ englobante. Je le fais à des fins de débogage/diagnostic principalement.

Répondre

0

AFAIK, non: il n'y a pas moyen direct de le faire sur SQL Server.

0
declare @foo int 
declare @bar int 

select @foo=1, @bar=2 

declare @variable_name varchar(10) 
set @variable_name = '@foo' 

if @variable_name = '@foo' 
    print @foo 
else if @variable_name = '@bar' 
    print @bar 
+0

Cela me limiterait aux deux choix statiques. Je suis intéressé par une solution générique. – hvintus

3

Techniquement, cela est possible en passant toutes les variables locales à sp_executesql:

declare @foo int 
declare @bar int 

declare @variable_name varchar(10) 
set @variable_name = '@foo' 
set @foo = 1; 
set @bar = 2; 

declare @sql nvarchar(max); 
set @sql = N'SELECT ' + @variable_name; 
exec sp_executesql @sql, N'@foo int, @bar int', @foo, @bar 

Bien sûr, cela serait très difficile à maintenir dans la vie réelle, l'appel à sp_executesql devrait être constamment tenu à jour avec les variables locales sur la trame en cours (batch ou appel de procédure). Bien que cela soit quelque peu «générique», cela ne vaut guère mieux que d'utiliser un gros CAS avec tous les noms de variables locaux.

+0

merci, je me suis retrouvé avec cas quand – uowzd01

Questions connexes