SQL 2005 にストアド プロシージャがあります。ストアド プロシージャは、実際には SP の最初に一時テーブルを作成し、最後に削除しています。現在、VS 2005 で SP をデバッグしています。SP の間で、一時テーブルの内容を知りたいと考えています。実行時に一時テーブルの内容を表示するのを手伝ってくれる人はいますか?
ありがとうございます
SQL 2005 にストアド プロシージャがあります。ストアド プロシージャは、実際には SP の最初に一時テーブルを作成し、最後に削除しています。現在、VS 2005 で SP をデバッグしています。SP の間で、一時テーブルの内容を知りたいと考えています。実行時に一時テーブルの内容を表示するのを手伝ってくれる人はいますか?
ありがとうございます
一時テーブルにはいくつかの種類がありますが、SPが使用した後に削除されていないテーブルを使用できると思います。同じ SP を 2 回呼び出さないように注意してください。そうしないと、既存のテーブルを作成しようとしてエラーが発生します。または、コンテンツが表示されたら、一時テーブルをドロップします。@table
したがって、テーブル変数 ( )を使用する代わりに、#table
またはを使用するだけです##table
http://arplis.com/temporary-tables-in-microsoft-sql-server/から:
ストアド プロシージャを編集して、実行時に一時テーブルから * を一時的に選択します (おそらく別のテーブルまたはファイル、または単に出力ペインに)。
その後、元に戻すことができます。元の手順をいじることができない場合は、コピーしてそのコピーを編集します。
別のセッションで作成された一時テーブルの内容をクエリできるストアド プロシージャをいくつか作成しました。
githubの sp_selectプロジェクトを参照してください。
exec sp_select 'tempdb..#temp'
テーブルの内容は、どのセッションから実行しても表示できます。
結論: デフォルトの Visual Studio Microsoft デバッガーは、実行およびデバッグされている SQL コードと同じセッションにありません。
したがって、グローバル ##temp テーブルまたは永続テーブル、またはセッション間で機能する最も好きな手法に切り替えることによって、#temp テーブルのみを見ることができます。
注:これは通常の言語デバッガとは大きく異なります...そして、Microsoftが意図的にそのように保っているのではないかと思います...数十年前にサードパーティのSQLデバッガツールを見たことがありますが、この問題はありませんでした。
デバッガーが SQL コードと同じセッションにできない技術的な理由はありません。したがって、#temp テーブルを含む、生成されたすべての構造を調べることができます。
データを永続テーブルにドロップするという以前の提案を拡張するには、次のことを試してください。
-- Get rid of the table if it already exists
if object_id('TempData') is not null
drop table TempData
select * into TempData from #TempTable
これは私を助けました。
SELECT * FROM #Name
USE [TEMPDB]
GO
SELECT * FROM syscolumns
WHERE id = ( SELECT id FROM sysobjects WHERE [Name] LIKE '#Name%')
これにより、すべての一時テーブルの詳細が得られます