一尘不染

删除实例的所有临时表

sql

我想知道如何/是否有可能删除所有临时表的查询?

我一直在尝试使用tempdb.sys.tables解决问题,但是正在努力格式化name列使其可以被删除-
另一个使事情变得棘手的因素是,temp表名称通常包含’_’意味着进行替换变得更麻烦了(至少对我而言!)

有什么我可以使用的方法,可以删除所有临时表(本地或全局),而不必分别删除所有临时表?

谢谢!


阅读 138

收藏
2021-03-10

共1个答案

一尘不染

临时表的要点是它们是..临时的。一旦超出范围

  • temp在存储的proc中创建:存储的proc退出

  • 在会话中创建的#temp:会话断开连接
  • temp:创建它的会话断开连接

查询消失。如果发现需要手动删除临时表,则需要重新使用它们。

对于全局变量,这将生成并执行语句以将其全部删除。

declare @sql nvarchar(max)
select @sql = isnull(@sql+';', '') + 'drop table ' + quotename(name)
from tempdb..sysobjects
where name like '##%'
exec (@sql)

但是,删除其他会话的[global]临时表是一个坏主意。

对于本地( 到此会话 )临时表,只需断开连接并再次重新连接。

2021-03-10