2009-06-08 42 views
1

有没有办法在SQL Server SP中动态地获取由其名称指定的本地变量的值?在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不会帮助,因为它没有进入封闭范围的局部变量。

我这样做主要是为了调试/诊断目的。

回答

0

据我所知,没有:有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

这会限制我到两个静态选择。我对通用解决方案感兴趣。 – hvintus 2009-06-08 21:47:58

3

从技术上讲,这是可能通过将所有局部变量以使用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 

当然,这将是十分困难在现实生活中维护,sp_executesql的调用就必须不断地保持最新与当前帧上的局部变量(批处理或过程调用)。虽然这有点“通用”,但它并不比使用大型CASE和所有局部变量名称更好。

+0

谢谢,我结束了案件时 – uowzd01 2015-06-17 02:26:32