为什么没有名字的临时表可能?

时间:2015-10-15 09:17:44

标签: sql-server sql-server-2012

简单复制:

SELECT ProductID
INTO #
FROM dbo.Products;

SELECT *
FROM #;

IF OBJECT_ID('tempdb..#') IS NOT NULL
    PRINT 'Wow';

执行得很好,结果我得到

为什么/怎么可能?

你不能拥有没有名字的真实表,为什么临时表可以是无名的?

2 个答案:

答案 0 :(得分:4)

您的临时表不是无名的。它的名字是'#'。

  

本地临时表
  本地临时表仅可供用户的当前连接使用;当用户与实例断开连接时,它们会自动删除。本地临时表名称以哈希(“#”)符号开始。

简而言之,文档说它必须以哈希开头。但没有其他限制(即长度)。

同样适用于以两个哈希字符开头的全局临时表。

此处有更多信息:http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

答案 1 :(得分:2)

如果你转到

  

数据库 - > Tempdb->临时表 - >

您可以找到#表附加了当前session id

类似

[dbo].#__________0000000894D9]

即使你创建一个名为temp table的{​​{1}},为了区分每个会话中的临时表,sql server 追加 #到临时表你创建的表。所以在内部它不会像session id

那样存储