我正在通过手动运行各种代码来调试存储过程。问题是代码创建了很多临时表,所以我必须在查询的开头添加很多"DROP TABLE #name"
才能使它适用于多次运行。
有没有办法在查询运行之前删除所有临时表?
答案 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)