動的SQLのパラメーターの印刷


9

私は多くのタスクで動的SQLを使用しており、同じ問題に継続的に遭遇しました:動的T-SQLステートメント内で使用される変数の値を出力します。

例えば:

Declare @SQL nvarchar(max), @Params nvarchar(max), @DebugMode bit, @Foobar int
select @DebugMode=1,@Foobar=364556423

set @SQL='Select @Foobar'
set @Params=N'@Foobar int'

if @DebugMode=1 print @SQL
exec sp_executeSQL @SQL,@Params
    ,@Foobar=@Foobar

上記のコードの印刷結果は、単に "Select @Foobar"です。実行中のSQLの値と変数名を動的に出力する方法はありますか?または、印刷を行うときに、SQLを再実行できるようにパラメーターを実際の値に置き換えますか?

同様のことを行うために関数を1つまたは2つ作成しましたが、データ型変換、パターンマッチングの切り捨ての問題、非動的な解決策を試しました。他の開発者がすべての変数を手動で印刷せずにこの問題を解決する方法に興味があります。

回答:


4

これを実行する1つの方法は、おそらくすでに実行したものであり、それは行を置き換えることです。

if @DebugMode=1 print @SQL

if @DebugMode=1 print @SQL + ' ' + convert(nvarchar(max), @Foobar)

そして、あなたはすべての変数に対してこの方法でそれをしなければなりません、あなたは変換エラーを避けるためにそれらを手動で変換する必要があります。

同様の方法でRAISERRORを使用することもできます。

if @DebugMode=1 RAISERROR (N'We used a value of %d for @Foobar', 10, 1, @Foobar)

HTH


残念ながら、これは、動的ステートメントで使用されるありとあらゆる変数の置換を手動で書くことを意味します。20以上の変数が使用および変更されている場合、または複数の動的SQLステートメントが同時に構築されている場合、これは扱いにくくなる可能性があります。
ブレントD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.