20

SSMS 2012 を使用して複雑な T-SQL スクリプトをデバッグしたいと考えています。

スクリプトをデバッグ モードで実行し、ブレークポイントを配置したり、スクリプトをステップ実行したりできますが、テーブル変数に格納されている値を確認できません。

Localsウィンドウにはこれらすべての変数が表示されますが、それらの値は次のように表示されます(table)

地元の窓口

コンテキスト メニューや変数をクリックして、変数の内容を表示する方法はありません。

を使用してテーブル変数に対してクエリを実行しようとしましたImmediate Windowが、これも機能しないようです。

イミディエイト ウィンドウ

デバッグセッションでテーブル変数から値を取得する方法はありますか?

4

4 に答える 4

14

テーブル変数を検査できないことを明示的に述べているドキュメントはどこにも見つかりませんが、それが可能であるとは思いません。Transact-SQL デバッガーから

ローカルウォッチ。これらのウィンドウには、現在割り当てられている Transact-SQL 式が表示されます。式は、単一のスカラー式に評価される Transact-SQL 句です。Transact-SQL デバッガーは、名前が @@ で始まる Transact-SQL 変数、パラメーター、または組み込み関数を参照する式の表示をサポートしています。これらのウィンドウには、式に現在割り当てられているデータ値も表示されます。

(私の強調)

つまり、スカラーのみを検査できます。

イミディエイト ウィンドウを使用しようとする試みに関しては、Debugger Command and Features の制限には次のように記載されています。

[イミディエイト]ウィンドウが表示されますが、変数に値を設定したり、データベースにクエリを実行したりするなど、有用なことは何も実行できません。


私はデバッガーを実際にあまり使用したことがありません。デバッガーを調べるたびに、このような制限に遭遇します。

そのため、私はまだ「old-skool」/「printf」アプローチを使用して SQL をデバッグする傾向があります。SELECT *テーブルの現在の状態を示すコード全体に余分な s を自由に含めたり、他の状態を示す余分なPRINTまたはRAISERRORメッセージなどを含めたりします。そして、実行するだけです。あなたがそれを形にするまで、コードを普通に。

于 2013-07-12T08:55:13.263 に答える
2

select ステートメントをスクリプトに入れるだけで、それが結果ウィンドウに表示されます。

@VarTable から * を選択します。

コードをステップ実行して選択を押すと、値が表示されます。次に、テストが完了したらコメントアウトするか、テストフラグを設定します。

お役に立てれば

于 2015-09-23T16:23:36.607 に答える
0

コードにselectステートメントを含めることは、私が知っていて考えられる唯一の方法です。

データベースに「構成」テーブルがあると、デバッグ コードを SP に永続的に追加できるため、頻繁にデバッグする必要がある場合に役立ちます。「if ({select logging level in config table}) = {debug} then select '@variable at location 1' as [@variable at location 1], * from @variable order by {some useful order} のようなコードを残すことができます"。

結果と列名の両方に変数名と場所 (チェックする必要がある場所がいくつかある場合) を含める方法により、特定のテーブルが存在する場合でも、出力内の変数を簡単に区別できますvariable には行がありません。これは予期していませんでした。

于 2020-04-27T18:46:49.373 に答える