5

#SQL Server では、 「ローカル一時テーブル」を意味するテーブルを作成し、 ##「グローバル一時テーブル」を意味することを知っています。

しかし、以下のようなテーブルを作成すると:

create table ###MyTable(IntColumn int, ValueColumn varchar(100))

このテーブルはローカルまたはグローバルの一時テーブルですか? どうすればテストできますか?私がそれをしようとしたときselect

Select * from #MyTable -- SQL said it doesn't exists
Select * from ##MyTable -- SQL said it doesn't exists
Select * from ###MyTable -- I get the output

3番目のケースが当てはまる場合、これは という名前の一般的なテーブルではない###MyTableでしょうか? このテーブルは、他のすべての物理テーブルと同様に、SSMS テーブル エクスプローラーに表示されませんか?

テーブル名の前に複数の # (ハッシュ) を追加するとどうなりますか?

4

2 に答える 2

5

トリプル ハッシュを含むテーブルは通常のグローバル一時テーブルであり、特別なことを行うのではなく、3 番目のハッシュがテーブル名の一部になっています。

-- global temp table name: #temp
SELECT 1 AS value
INTO ###temp

-- global temp table name: temp
SELECT 2 AS value
INTO ##temp

-- temp table name: temp
SELECT 3 AS value
INTO #temp

select * from   tempdb.INFORMATION_SCHEMA.TABLES 

上記の SQL を実行した結果は、予想どおり、すべてのオブジェクトが temp db に追加されたことを示しています。

理論をテストするために、新しいクエリ ウィンドウで次のコマンドを実行すると、次の##プレフィックスを持つグローバル一時テーブルにのみアクセスできるようになります。

-- this one is accessible
SELECT *
FROM ###temp

-- this one is accessible    
SELECT *
FROM ##temp

-- this one won't work as it's out of scope in a new query window
SELECT *
FROM #temp

要約すると、2 番目のハッシュの後のすべてがテーブル名の一部になり、グローバル一時テーブルとして保存されます。

于 2014-11-12T11:05:59.040 に答える