如何强制 drop temp table 命令完全删除 table?

问题描述

我正在编写脚本,只是在试验和开发。我所做的很多工作都涉及临时表,至少在初始实验/早期开发阶段我会select ... into #SoMetable from ...

然后我会查看结果,进行一些更改,然后再继续。但是为了让自己更轻松一些,我还有一个 drop table if exists #SoMetable,所以我可以重新运行代码。到现在为止还挺好。但是,如果我向临时表中添加一列然后尝试访问它,我会收到错误 Invalid column name 'newColumn'。我可以通过只执行 drop 语句,然后执行整个脚本来避免错误,但我宁愿不必这样做。据我了解,有一些临时表正在缓存,我想知道这是否是罪魁祸首。无论如何,有没有办法解决这个问题?

编辑:这是一个演示问题的简短脚本。运行脚本,然后取消注释并再次运行它:

drop table if exists #DemoTable
select column1 = '1',column2 = '2'
--,column3 = '3'
into #DemoTable

select column1,column2
--,column3
from #DemoTable

解决方法

我已尝试按照问题中提到的步骤进行操作。

请使用 Northwind 数据库查找以下查询示例。 向临时表添加了一个新列,并且更新成功。

-- Create the temporary table #temp_Employees from a physical table called 'Employee' in schema 'dbo' in database 'Northwind'
SELECT EmployeeID,FirstName,LastName,BirthDate
INTO #temp_Employees
FROM [Northwind].[dbo].[Employees]

-- SELECT data from temptable '[#temp_Employees]' 
SELECT * FROM #temp_Employees;

-- Add a new column '[City]' to table '[#temp_Employees]' 
ALTER TABLE #temp_Employees 
    ADD [City] NVARCHAR(15)  NULL
GO

-- SELECT data from temptable '[#temp_Employees]' 
SELECT * FROM #temp_Employees;

-- UPDATE the new column '[City]' in the table '[#temp_Employees]' 
UPDATE T
SET  T.[City]=E.[City]
FROM #temp_Employees T INNER JOIN [Northwind].[dbo].[Employees] E ON T.EmployeeID=E.EmployeeID;

-- SELECT data from temptable '[#temp_Employees]' 
SELECT * FROM #temp_Employees;

-- Drop the temptable if it already exists
IF OBJECT_ID('tempDB..#temp_Employees','U') IS NOT NULL
DROP TABLE #temp_Employees;
GO

-- SELECT data from temptable '[#temp_Employees]' 
SELECT * FROM #temp_Employees;

谢谢。

,

在 SSMS 中,您只需添加 GO 语句即可将代码分成 2 批。 这样,drop 在脚本的第二部分检查错误之前执行。

drop table if exists #DemoTable
GO

select column1 = '1',column2 = '2'
--,column3 = '3'
into #DemoTable

select column1,column2
--,column3
from #DemoTable