6

SQL 2005 にストアド プロシージャがあります。ストアド プロシージャは、実際には SP の最初に一時テーブルを作成し、最後に削除しています。現在、VS 2005 で SP をデバッグしています。SP の間で、一時テーブルの内容を知りたいと考えています。実行時に一時テーブルの内容を表示するのを手伝ってくれる人はいますか?

ありがとうございます

4

6 に答える 6

14

一時テーブルにはいくつかの種類がありますが、SPが使用した後に削除されていないテーブルを使用できると思います。同じ SP を 2 回呼び出さないように注意してください。そうしないと、既存のテーブルを作成しようとしてエラーが発生します。または、コンテンツが表示されたら、一時テーブルをドロップします。@tableしたがって、テーブル変数 ( )を使用する代わりに、#tableまたはを使用するだけです##table


http://arplis.com/temporary-tables-in-microsoft-sql-server/から:

ローカル一時テーブル

  • (#table_name) のように、名前の最初の文字として 1 つの番号記号 (#) を付けたローカル一時テーブルのプレフィックス。
  • ローカル一時テーブルは、現在のセッションでのみ表示されるか、ユーザーの現在の接続でのみ表示されると言えます。これらは、ユーザーが Microsoft SQL Server のインスタンスから切断すると削除されます。

グローバル一時テーブル

  • (##table_name) のように、名前の最初の文字として 2 つのシャープ記号 (##) を付けたグローバル一時テーブルのプレフィックス。
  • グローバル一時テーブルはすべてのセッションに表示されます。または、作成後にすべてのユーザーに表示されると言えます。
  • これらは、テーブルを参照しているすべてのユーザーが Microsoft SQL Server から切断されると削除されます。
于 2008-09-24T08:31:59.527 に答える
7

ストアド プロシージャを編集して、実行時に一時テーブルから * を一時的に選択します (おそらく別のテーブルまたはファイル、または単に出力ペインに)。

その後、元に戻すことができます。元の手順をいじることができない場合は、コピーしてそのコピーを編集します。

于 2008-09-24T08:25:20.807 に答える
6

別のセッションで作成された一時テーブルの内容をクエリできるストアド プロシージャをいくつか作成しました。

githubの sp_selectプロジェクトを参照してください。

exec sp_select 'tempdb..#temp'テーブルの内容は、どのセッションから実行しても表示できます。

于 2011-04-20T14:40:25.457 に答える
3

結論: デフォルトの Visual Studio Microsoft デバッガーは、実行およびデバッグされている SQL コードと同じセッションにありません。

したがって、グローバル ##temp テーブルまたは永続テーブル、またはセッション間で機能する最も好きな手法に切り替えることによって、#temp テーブルのみを見ることができます。

注:これは通常の言語デバッガとは大きく異なります...そして、Microsoftが意図的にそのように保っているのではないかと思います...数十年前にサードパーティのSQLデバッガツールを見たことがありますが、この問題はありませんでした。

デバッガーが SQL コードと同じセッションにできない技術的な理由はありません。したがって、#temp テーブルを含む、生成されたすべての構造を調べることができます。

于 2012-01-03T22:27:22.667 に答える
1

データを永続テーブルにドロップするという以前の提案を拡張するには、次のことを試してください。

-- Get rid of the table if it already exists
if object_id('TempData') is not null
  drop table TempData

select * into TempData from #TempTable
于 2008-09-24T09:00:08.943 に答える
1

これは私を助けました。

SELECT * FROM #Name

USE [TEMPDB]
GO

SELECT * FROM syscolumns 
   WHERE id = ( SELECT id FROM sysobjects WHERE [Name] LIKE '#Name%')

これにより、すべての一時テーブルの詳細が得られます

于 2008-09-24T08:42:21.657 に答える