【问题标题】:Get a value of a variable dynamically in SQL Server SP在 SQL Server SP 中动态获取变量的值
【发布时间】:2009-06-08 21:33:06
【问题描述】:

有没有办法在 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 sql-server tsql stored-procedures


    【解决方案1】:

    从技术上讲,这可以通过将所有局部变量传递给 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 更好。

    【讨论】:

      【解决方案2】:

      AFAIK,不:在 SQL Server 上没有直接方法可以做到这一点。

      【讨论】:

        【解决方案3】:
        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
        

        【讨论】:

        • 这会将我限制在两个静态选择中。我对通用解决方案感兴趣。
        猜你喜欢
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2011-07-28
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多