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

How do I force a drop temp table command to fully drop the table?

我正在编写脚本,只是在试验和开发。我所做的很多工作都涉及临时 tables,我将 select ... into #SomeTable from ...,至少在最初的 experimentation/early 开发阶段。

那我看看结果,做一些修改,再去。但是为了让我自己轻松一点,我还有一个 drop table if exists #SomeTable,所以我可以重新 运行 代码。到目前为止,一切都很好。但是,如果我向临时 table 添加一列然后尝试访问它,我会收到错误 Invalid column name 'newColumn'。我可以通过仅执行 drop 语句然后执行整个脚本来避免错误,但我宁愿不必这样做。据我了解,有一些 temp tables 的缓存在继续,我想知道这是否是罪魁祸首。无论如何,有什么办法可以解决这个问题吗?

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

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

select column1
      ,column2
--      ,column3
from #DemoTable

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

请使用 Northwind 数据库查找以下查询示例。 向临时文件中添加了一个新列 table 并成功更新了它。

-- 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 语句即可将代码分成两批。 这样 drop 在检查脚本的第二部分是否有错误之前执行。

drop table if exists #DemoTable
GO

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

select column1
      ,column2
--      ,column3
from #DemoTable