我似乎遇到了临时表垃圾收集的问题:
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,并且效果很好。现在,使用临时表,它不会......我愿意接受有关替代方法的建议。