在运行查询之前删除所有本地临时表

时间:2014-01-03 17:57:01

标签: sql-server-2012

我正在通过手动运行各种代码来调试存储过程。问题是代码创建了很多临时表,所以我必须在查询的开头添加很多"DROP TABLE #name"才能使它适用于多次运行。

有没有办法在查询运行之前删除所有临时表?

1 个答案:

答案 0 :(得分:0)

您可以在旧帖here ...

中找到解决方案

我建议首先确保它只删除要删除的表,打印准备好的查询

declare @sql nvarchar(max)

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

select @sql 

然后如果所有表名都对你好。使用exec(SQL)运行

EXEC( @sql )

下面是我为此所做的测试,它起作用,因为我的临时表的名称以'##'开头,在我的情况下没有拉出任何全局临时表。

declare @sqlCreate nvarchar(max)
declare @sqldrop nvarchar(max)

--Creating Temp tables
set @sqlCreate = 'create table ##tempTable1( c int, b int, a nvarchar(50) ) ; create table ##tempTable2( c int, b int, a nvarchar(50) )'
EXEC( @sqlCreate )

--Preparing drop statement
select @sqldrop = isnull(@sqldrop+';', '') + 'drop table ' + quotename(name)
from tempdb..sysobjects
where name like '##%'

--Making sure that only my temp tables are returned.
select @sqldrop 

--Executing the drop query
EXEC(@sqldrop)