为什么我不能连续两次从SSMS创建一个临时表?

时间:2016-05-12 21:35:36

标签: sql sql-server tsql

我可能从根本上误解了临时表 -

但是从SSMS内部,我有以下内容:

Create Table #temp(FromUserId int, ToUserId int, FromAction int, ToAction int, IsMatch int)

如果我执行两次,我收到错误:

There is already an object named '#temp' in the database.

如果表是#temporary,为什么会发生这种情况?

4 个答案:

答案 0 :(得分:5)

每个SSMS选项卡都是自己的连接。您创建的任何临时对象都不会被删除,直到您关闭它或显式删除它为止。这实际上非常有用。

答案 1 :(得分:3)

临时表具有连接本地范围或所有连接的全局范围。当我使用临时表构建过程时,我在普通查询窗口中工作,并且在每次创建之前都有一个drop语句。然后,当它全部设置时,我添加创建过程代码并注释掉drop table语句,因为在正常执行期间临时表还不存在。这是关于临时表主题的非常好的文章。

https://www.simple-talk.com/sql/t-sql-programming/temporary-tables-in-sql-server/

答案 2 :(得分:2)

临时表将持续到显式删除或创建它的会话结束。 尝试在SSMS中关闭查询窗口并打开一个新窗口。您的临时表将无法在新查询窗口中使用。

答案 3 :(得分:0)

我想补充一点,如果您的过程或代码在行下面包含SELECT INTO #tmp或CREATE TABLE #tmp,则可以在过程/查询的开头包含以下语句:

IF OBJECT_ID(tempDB..#Tmp) IS NOT NULL DROP TABLE #tmp

这将确保您可以重用proc而不必担心尝试创建/使用已存在的表。