我似乎遇到了與臨時表垃圾收集問題:臨時表垃圾收集
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'.
我想是因爲#TestTempTable是越來越垃圾回收當proc退出時。
有沒有辦法來防止這種情況?我不希望每個調用者都需要在調用過程之前顯式創建臨時表。
更新: 我爲什麼要這樣做?
我需要存儲一些上下文信息(基本上是一個會話變量)。我爲此使用了CONTEXT_INFO。 SQL Azure不支持CONTEXT_INFO,所以我正在重構。從本質上講,我有一個函數:
GetMySessionVariableName()
和程序
SetMySessionVariableName(值)
此前,這一功能和過程中使用CONTEXT_INFO內部,並且工作得很好。現在,使用臨時表,它不......我接受關於替代方法的建議。
就目前來看,這是不可能的,因爲你的最終約束。您可以選擇臨時表,然後從臨時表中進行選擇。我們都會同意這一點,因爲您可能剛剛選擇了數據,這會非常愚蠢。因此,導致下一部分,*這顯然不是整個圖片*。如果你能提供更多的信息,那麼幫助會更好。 – swasheck
@ p.campbell他將如何查詢存儲過程之外的表變量? –
增加了更多的上下文 – Jeff