2016-07-01 2 views
0

テンポラリテーブルを##tempで作成し、select * into ##temp from tablenameを使用してオンザフライで作成するストアドプロシージャがあります。テンポラリテーブルを削除するストアドプロシージャ

このストアドプロシージャは、グローバルで##があるにもかかわらず、クエリが実行されたときにこの瞬間のみ削除または利用可能になっているようですが、他のユーザーが知っているものから使用できます。

SSRSを使用して、ストアドプロシージャをプルし、このレポートのドリルスルーを使用して、最初のチャートのみを表示します。第2レポートは、パラメータ経由でアクションリンクを使用する同じストアドプロシージャです。レポートは##tempテーブルを認識しません。

この背景には、これを回避するための方法があるかどうか、データウェアハウスがないことを覚えておいてください。一時的なテーブルを使用するだけで回避できます。

おかげ

+2

テーブルを永続化する場合は、一時テーブルではなく実際のテーブルを使用します。また、SPは一度だけ実行され、既に存在するテーブルのために後続の実行で失敗します。 SELECT ... INTO ..ではなく、 'INSERT INTO ... SELECT ...'を使用してください。 –

+1

@ChrisPickfordと同意します。 [tempテーブル](https://msdn.microsoft.com/en-us/library/ms174979.aspx)のドキュメントはこちらです。テンポラリテーブルがスコープを離れて使用できなくなることを期待できるときに詳細を記したセクションがあります(途中で、* Temporary Tables *という見出しがあります)。 –

+0

Chrisさん、ありがとうございました。私の上司はクライアントに属しているSQLサーバーについて言及していましたので、テーブルを作成しないようにしましたが、ビューは正しく機能すると思います。 – abs786123

答えて

1

MSDNから:

グローバル一時テーブル表を作成したセッションが終了し、他のすべてのタスクは、それらを参照する停止したときに自動的に削除されます。タスクとテーブルの関連付けは、単一のTransact-SQLステートメントの実行中のみ維持されます。これは、作成セッションが終了したときにテーブルをアクティブに参照していた最後のTransact-SQLステートメントの完了時に、グローバル一時テーブルが削除されることを意味します。

サーバーへの管理者アクセス権がある場合は、this answerを試してください。

関連する問題