如何删除临时表

时间:2019-10-02 10:40:07

标签: sql-server sql-server-2016

使用SELECT .. INTO语句创建一个临时表

DROP TABLE IF EXISTS #MyTempTable

在数据库,tempdb,临时表下我看到了temp表 dbo。#MyTempTable ____________________ 0000000016CA

现在我要放桌子。我尝试了以下方法:

IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL 
BEGIN 
    DROP TABLE #MyTempTable 
END

AND

SELECT OBJECT_ID('tempdb..#MyTempTable') 

两个都没有删除表

Select返回NULL:

{{1}}

2 个答案:

答案 0 :(得分:0)

您可以将技巧与OBJECT_ID配合使用。
但是请确保检查的表是否存在与您删除的表相同。

IF OBJECT_ID('tempdb..#MyTempTable', 'U') IS NOT NULL 
BEGIN 
    DROP TABLE #MyTempTable;
END

或简化为:

IF OBJECT_ID('tempdb..#MyTempTable', 'U') IS NOT NULL 
    DROP TABLE #MyTempTable;

答案 1 :(得分:0)

请注意检查表和删除表的名称。#MyTempTable#lu_sensor_name_19

这对我有用:

IF OBJECT_ID('tempdb..#MyTempTable') IS NOT NULL DROP TABLE #MyTempTable;

如果这不适用于您,我认为您的问题与临时表的范围和/或可见性有关。

临时表仅在创建它们的会话中存在, 我猜您正在删除一个不存在Amymore的临时表,或另一个会话中的临时表。

首先,当您要删除表时,必须检查进行SELECT INTO的会话是否仍处于活动状态。

如果答案是肯定的,则检查您是从同一会话还是从另一会话退出。

在第二种情况下,您可以使用##MyTempTable代替#MyTempTable来解决问题

否则,它意味着某些东西或其他人已经将其丢弃