我创建了一个包含 7 个临时表的存储过程,每个临时表在它们自己的工作结束时被删除。
我从一个 Web 服务和我们用于不同实例的相同 Web 服务调用 SP。
我已经强制删除了每个临时表,但是当 SP 执行时,它不会删除位于“tempdb/临时表”中的任何临时表。而且,当我打开我的应用程序的新实例并尝试执行相同的 SP 时,它会修改相同的临时表。
这给我带来了问题。它会在 SP 同时执行时锁定表,它会锁定表,我的 sp 无法产生结果并抛出异常。
所以我想在操作结束时删除我的临时表。请帮忙。
我创建了一个包含 7 个临时表的存储过程,每个临时表在它们自己的工作结束时被删除。
我从一个 Web 服务和我们用于不同实例的相同 Web 服务调用 SP。
我已经强制删除了每个临时表,但是当 SP 执行时,它不会删除位于“tempdb/临时表”中的任何临时表。而且,当我打开我的应用程序的新实例并尝试执行相同的 SP 时,它会修改相同的临时表。
这给我带来了问题。它会在 SP 同时执行时锁定表,它会锁定表,我的 sp 无法产生结果并抛出异常。
所以我想在操作结束时删除我的临时表。请帮忙。
我不能告诉你为什么会这样,但我以前也处理过。尝试在 SP 的开头或结尾清理表或使用表变量。
IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName
如果您使用了许多 Temp 表并且您的 sp 和您的 drop 语句无法执行之间有一些错误,则可能会发生这种情况。
所以它总是使用的最佳实践
IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName
在 SP 的开始。
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
要强制删除临时表,请使用
BEGIN TRY DROP #MyTable END TRY BEGIN CATCH END CATCH
丑陋但有效。对每个临时表使用单独的 TRY。