为什么临时表没有从SQL Server中的tempdb中删除?

时间:2011-07-08 11:35:46

标签: sql sql-server temp-tables tempdb

我创建了一个包含7个临时表的存储过程,每个临时表在他们自己的工作结束时被删除。

我从一个Web服务和相同的Web服务调用SP,我们用于不同的实例。

我强行删除了每个临时表,但是当SP执行时,它不会删除位于“tempdb / Temporary Table”中的任何临时表。而且,当我打开我的应用程序的新实例并尝试执行相同的SP时,它将修改相同的临时表。

这给我带来了麻烦。当SP同时执行时它将锁定表,它将锁定表,我的sp无法产生结果并抛出异常。

所以我想在操作结束时删除临时表。请帮忙。

4 个答案:

答案 0 :(得分:7)

我不能告诉你为什么会这样,但我之前也已经处理过了。 尝试在SP的开头或结尾处清理表或使用表变量。

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName

答案 1 :(得分:3)

如果你使用了很多临时表并且你的sp之间有一些错误并且你的drop语句无法执行,就会发生这种情况。
所以最好的做法是使用

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName

在SP的开始。

答案 2 :(得分:0)

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName

我认为这不会起作用,因为我们知道sql server临时表名称添加了一些额外的字符。 if exists(从tempdb.sys.tables中选择1,其中名称如'#TableName%') DROP TABLE #TableName

答案 3 :(得分:0)

要强制删除临时表,请使用

BEGIN TRY DROP #MyTable END TRY BEGIN CATCH END CATCH

丑陋但有效。为每个临时表使用单独的TRY。