0

tempdb ノードを展開して一時テーブルに移動すると、一時テーブルの名前に " _ __ _ _ _XXXXX" が追加されていることがわかります。その部分はどこを参照していますか?一時テーブルが作成されるメモリの場所ですか? ありがとうございました

4

1 に答える 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'.

XXXXXに固有の意味はありません。

于 2013-04-24T04:56:18.617 に答える