SSMS 2012を使用して複雑なT-SQLスクリプトをデバッグしたいと思います。
スクリプトをデバッグモードで実行してブレークポイントを配置し、スクリプトをステップ実行できますが、テーブル変数に格納されている値を表示できません。
Locals
ウィンドウにこれらの変数がすべて表示されますが、それらの値は(table)
として表示されます。
コンテキストメニューまたは変数をクリックして変数の内容を表示する方法はありません。
Immediate Window
を使用してテーブル変数に対してクエリを実行しようとしましたが、これも機能しないようです。
デバッグセッションでテーブル変数から値を取得する方法を教えてください。
テーブル変数を検査できないと明示的に述べている文書はどこにも見つかりませんが、それが可能であるとは思いません。 From Transact-SQL Debugger
LocalsおよびWatchこれらのウィンドウには、現在割り当てられているTransact-SQL式が表示されます。 式は、単一のスカラー式に評価されるTransact-SQL句です。 Transact-SQLデバッガーは、Transact-SQL変数、パラメーター、または@@で始まる名前を持つ組み込み関数を参照する式の表示をサポートしています。これらのウィンドウには、現在式に割り当てられているデータ値も表示されます。
(私の強調)
つまり、スカラーのみを検査できます。
イミディエイトウィンドウを使用する試みについて、 デバッガコマンドと機能の制限 は次のように述べています。
Immediateウィンドウが表示されますが、変数を値に設定したり、データベースを照会したりするなど、ウィンドウを使用して何か便利なことはできません。
デバッガを実際に使用したことはありません。調べてみるたびに、このような制限が発生します。
そのため、SQLのデバッグに「old-skool」/「printf」アプローチを使用する傾向があります。テーブルの現在の状態を示すコード全体に余分なSELECT *
sを自由に含め、他の状態を示す余分なPRINT
またはRAISERROR
メッセージを含めます。そして、それからあなたがそれを形に打ち消すまで、コードを普通に実行します。
次のコードを使用すると、テーブルのコンテンツをXMLとして表示できます。
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)
SELECTステートメントが返す結果を確認すると便利です。私はそれをテストし、それは動作します。
続きを読む こちら 。
Selectステートメントをスクリプトに挿入するだけで、結果ウィンドウに表示されます。
@VarTableから*を選択します。
コードをステップ実行して選択ボタンを押すと、値が表示されます。次に、テストが終了したらコメント化するか、テストフラグを設定します。
お役に立てれば