如果您展开 tempdb 节点并转到临时表,您会注意到临时表的名称附加了“ _ __ _ _ _XXXXX”。那部分是指哪里?是创建临时表的内存地方吗?谢谢
问问题
965 次
1 回答
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'.
XXXXXX没有内在含义。
于 2013-04-24T04:56:18.617 回答