临时表名称的后缀是什么意思?

时间:2013-04-24 04:47:52

标签: sql-server sql-server-2008 sql-server-2008-r2 temp-tables system-databases

如果展开tempdb节点并转到临时表,您会注意到临时表的名称包含" _ __ _ _ _XXXXX"追加。该部分在哪里引用?它是创建临时表的内存位置吗? 谢谢

1 个答案:

答案 0 :(得分:3)

临时表也是物理表,就像任何其他表一样。它们有点特殊,当它们超出范围时需要自动清理。为避免名称冲突,由于每个人都希望将其临时表命名为#tmp,因此SQL Server会生成一个伪随机名称,该名称将赋予在tempdb中创建的物理表。这与您对临时表的引用相关联,例如SPID 1234 "#tmp" refers to tempdb.dbo.#tmp___________0000000001CA。另请注意,即使您可以从另一个会话中看到tempdb.sys.tables中的表,但这并不意味着您可以通过常规方式进行选择,例如。

create table #tmp (a int); insert #tmp values (1),(2);
select * from [#tmp_____________0000000001CA]  -- run by creator of #tmp

Results: 

a
-
1
2

select * from [#tmp_____________0000000001CA]  -- run by another session

Msg 208, Level 16, State 0, Line 1
Invalid object name '#tmp____________0000000001CA'.

XXXXX 没有固有的含义。