3

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

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

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

这给我带来了问题。它会在 SP 同时执行时锁定表,它会锁定表,我的 sp 无法产生结果并抛出异常。

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

4

4 回答 4

7

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

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName
于 2011-07-08T20:39:21.793 回答
3

如果您使用了许多 Temp 表并且您的 sp 和您的 drop 语句无法执行之间有一些错误,则可能会发生这种情况。
所以它总是使用的最佳实践

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

在 SP 的开始。

于 2012-10-25T09:38:26.970 回答
1
IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName

我认为这不起作用,因为我们知道 sql server 存储临时表名称并添加了一些额外的字符。if exists(select 1 from tempdb.sys.tables where name like '#TableName%') DROP TABLE #TableName

于 2013-06-17T06:50:38.173 回答
1

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

BEGIN TRY DROP #MyTable END TRY BEGIN CATCH END CATCH

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

于 2014-02-17T12:18:13.040 回答