删除当前spid的临时表

时间:2012-07-05 21:25:52

标签: sql-server

如何删除临时表并确保其仅适用于当前的@@ spid。

IF EXISTS
(
SELECT *
FROM tempdb.dbo.sysobjects
WHERE ID = OBJECT_ID(N'tempdb..#tmp')
)
BEGIN
DROP TABLE #tmp
END

2 个答案:

答案 0 :(得分:3)

根据定义,本地#temp表仅适用于当前的 spid session_id - 因此您的查询已经完成了您的要求。这可能有点简单:

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

但显式删除此临时表的目的是什么?您知道解析器不允许您在同一批次中创建另一个具有相同名称的解析器,对吗?

答案 1 :(得分:2)

本地tempdb表(如#tmp)仅对当前会话可见。

全局tempdb表(如##tmp)在其他会话中也可见。

只要您只使用一个#前缀,您的临时表就会在您的会话中是本地的。

有关详细信息,请参阅此article on SQL Server central