我似乎遇到了与临时表垃圾收集问题:临时表垃圾收集
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