在SQL Server SP中动态获取变量的值
问题描述:
有没有办法在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不会帮助,因为它没有进入封闭范围的局部变量。
我这样做主要是为了调试/诊断目的。
答
据我所知,没有:有SQL Server上这样做的没有直接方式。
答
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
答
从技术上讲,这是可能通过将所有局部变量以使用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
这会限制我到两个静态选择。我对通用解决方案感兴趣。 – hvintus 2009-06-08 21:47:58