T-SQLでデバッグ時にテーブル変数の値を確認するにはどうすればよいですか?


187

デバッグ時にSQL Server Management Studio(SSMS)のテーブル値変数の値(行とセル)を確認できますか?はいの場合、どのように?

ここに画像の説明を入力してください

回答:


31

このMicrosoft Connectリンクによると、まだ実装されていません: Microsoft Connect



2
そして、私たちは2016年にいます。[接続]リンクも機能しなくなります。
dotNET 2016

5
正直に言うと、これは質問に答えないので実際には答えではありません。質問は、それを行う方法(SSMSに機能がないかどうかではありません)であり、値を表示する方法はありますが、実装されていないと述べています非常に役立ちます。
–RăzvanFlavius Panda 2016

1
この回答を削除してください。以下の答えが受け入れられた答えになるはずです。
Vortex852456 2017

2018年、まだ違います。
AgentFire 2018

317
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

上記のステートメントを、テーブルの内容を表示する場所に挿入します。テーブルのコンテンツは、ローカルウィンドウでXMLとしてレンダリングされるか@v、ウォッチウィンドウに追加できます。

ここに画像の説明を入力してください


1
これは間違いなく、小さなテーブルをXMLとして表示するのに十分な回避策です。
ファイズ

4
しかし、それでも読書を止めないでください!以下の別の素晴らしいオプション!素晴らしいスレッド!!
Mike M

1
私は、XMLを含む大きなテーブルを読むのにあまり友好的ではありませんでした。XMLをコピーしてxmlgrid.netに貼り付けると、XMLをテーブルとして表示できます。テーブルの視覚化は本当に役立ちます。Visual Studioのデータテーブルビューアのようなテーブルビューアを持つSSMSのリリースを待っています。
Moiz Tankiwala 2017

1
「FOR XML」句に「、ROOT( 'rootNodeName')」を追加できます。これにより、1つのルートの下に複数の行(ある場合)が収集され、正当なXMLドキュメントが作成されます。これは、テキストビジュアライザではなくXMLビジュアライザで表示できます。
JohnL4

2
SQL Server 2016を使用するか、決してこれのJSONバージョンを使用することはできません DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke

18

このプロジェクトhttps://github.com/FilipDeVos/sp_selectにはストアドプロシージャがありますsp_select、一時テーブルから選択できるあります。

使用法:

exec sp_select 'tempDb..#myTempTable'

ストアドプロシージャのデバッグ中に、新しいタブを開いてこのコマンドを実行し、一時テーブルの内容を確認できます。


6
一時テーブルには
最適

また、開いているトランザクションがある場合はハングするため、テストの開始時に常にトランザクションを開くtSQLtなどのフレームワークでテストのデバッグを使用する場合はあまり使用しません。
ネイサン

1
WOW WOW WOW WOW
vothaison 18/7/26

グッド-あなたは、単一の列または2で並べ替えることができれば素晴らしいだろう
user2486488

6

ストアドプロシージャで、グローバル一時テーブル## temptableを作成し、テーブル内のデータをこの一時テーブルに挿入するストアドプロシージャ内に挿入クエリを記述します。

これが完了すると、新しいクエリウィンドウを開いて一時テーブルの内容を確認できます。「select * from ## temptable」を使用するだけです


1

選択クエリを使用して、チェックしたい場所にvarialbleテーブルを表示します。

http://www.simple-talk.com/sql/learn-sql-server/management-studio-improvements-in-sql-server-2008/


はい、最善かつ最も迅速なオプションに同意しました。これを実行し、さらに制御が必要な場合は、実行するSQLのみを強調表示して実行します。
Jammin、

2
ウォッチウィンドウのどこで選択クエリを使用しますか?
ファイズ

プロシージャ内の選択または実行しているアドホッククエリを使用します
solairaja '15

しかし、テストする必要があるのはテーブル値関数であり、「関数に含まれるSelectステートメントはクライアントにデータを返すことができません」というエラーをスローします。特に、提供されているデバッグツールを使用して調査する方法はありますか?
ファイズ、

3
いいえ、問題は解決しません。追加のプラグインなしではこれは不可能だと思います。
Faiz

1

SQL Server 2016以降を使用している場合は、JSON結果として選択してJSON Visualizerに表示することもできます。XMLよりもはるかに読みやすく、結果をフィルターできます。

DECLARE @v nvarchar(max) = (SELECT * FROM Suppliers FOR JSON AUTO)

ここに画像の説明を入力してください


0

プラグインなしではこれは不可能だという結論に達しました。


Visual Studio 2010のプレビューをいくつか見ました。デモンストレーターは、一時テーブルがデバッグモードで表示できるかどうかを知りませんでした。多分それがリリースされたとき、私は息を止めていません。
フィリップケリー

0

SQL Server Profiler 2014には、テーブル値パラメーターの内容がリストされています。以前のバージョンでも動作する場合があります。ストアドプロシージャグループとTextData列でSP:StartingまたはRPC:Completedイベントを有効にします。ログのエントリをクリックすると、テーブル変数の挿入ステートメントが表示されます。その後、テキストをコピーしてManagement Studioで実行できます。

出力例:

declare @p1 dbo.TableType
insert into @p1 values(N'A',N'B')
insert into @p1 values(N'C',N'D')

exec uspWhatever @PARAM=@p1

-1

なぜテーブルを選択して変数をそのように表示しないのですか?

SELECT * FROM @d

4
その方法を教えてください。SELECT * FROM @Tableデバッグ中のスクリプトにを追加しても、結果ウィンドウに結果が出力されません。
StingyJack

-3

申し訳ありませんが、私はパーティーに少し遅れましたが、後でこの質問に遭遇した人にとって、ストアドプロシージャでこれを行う最も簡単な方法は次のとおりです。

  1. 上部で宣言および初期化されたプロシージャパラメータを使用して新しいクエリを作成します。
  2. 手順の本文に貼り付けます。
  3. テーブル変数がデータで初期化された直後に、古き良き形式の選択クエリを追加します。
  4. 3.が手順の最後のステートメントでない場合は、同じ行にブレークポイントを設定し、デバッグを開始して、ブレークポイントまでまっすぐ進みます。
  5. 利益!!

messi19の答えは受け入れられた1つのIMHOである必要があります。それは私のものよりも簡単でほとんどの場合に機能しますが、私のように、ループ内に検査したいtable変数がある場合、これはうまく機能します多くの努力や外部のSSMSプラグインなし。


これは、OPが実行しようとしていることとは正反対です。
ジェイミーマーシャル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.