一時テーブルのガベージコレクションで問題が発生しているようです。
CREATE PROCEDURE dbo.SetTestTempTable(@value bit)
AS
SET NOCOUNT ON
IF OBJECT_ID('tempdb..#TestTempTable') IS NOT NULL
DROP TABLE #TestTempTable
SELECT @value AS Value INTO #TestTempTable
GO
EXEC dbo.SetTestTempTable 1
SELECT * FROM #TestTempTable
上記のコードはエラーを生成します
Msg 208, Level 16, State 0, Line 3
Invalid object name '#TestTempTable'.
procが終了すると#TestTempTableがガベージコレクションを取得しているためだと思います。
これを防ぐ方法はありますか?プロシージャを呼び出す前に、すべての呼び出し元が明示的に一時テーブルを作成する必要がないようにします。
更新:なぜ私はこれをしているのですか?
コンテキスト情報(基本的にはセッション変数)を保存する必要があります。これにはCONTEXT_INFOを使用していました。SQL AzureはCONTEXT_INFOをサポートしていないため、それに応じてリファクタリングしています。基本的に、私には次の機能があります。
GetMySessionVariableName()
と手順
SetMySessionVariableName(value)
以前は、この関数とプロシージャは内部でCONTEXT_INFOを使用していましたが、これは正常に機能していました。さて、一時テーブルでは、そうではありません...私は別のアプローチについての提案を受け入れています。