2009-06-08 5 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

これは、2つの静的な選択に制限されます。私は一般的なソリューションに興味があります。 – hvintus

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

関連する問題