#temp テーブルに 3 つの連続するアンダースコアを使用しないと仮定すると、これは #temp テーブルのみを取得する必要があります。ただし、テーブル変数は取得されません。また、このコードを何らかの方法で変更して、他の誰かの接続でテーブルを選択することもできません。これOBJECT_ID('tempdb..#foo')
は、セッション内のテーブルに対してのみ true を返すことができるためのみ機能します。
SELECT
name = SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1),
t.[object_id]
FROM tempdb.sys.tables AS t
WHERE t.name LIKE '#%[_][_][_]%'
AND t.[object_id] =
OBJECT_ID('tempdb..' + SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1));
また、これらの各テーブル (少なくともヒープまたはクラスター化インデックス) によって使用される領域にも関心があるかもしれません。たとえば、次のようになります。
SELECT
name = SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1),
t.[object_id],
p.used_page_count,
p.row_count
FROM tempdb.sys.tables AS t
INNER JOIN tempdb.sys.dm_db_partition_stats AS p
ON t.[object_id] = p.[object_id]
WHERE t.name LIKE '#%[_][_][_]%'
AND p.index_id IN (0,1)
AND t.[object_id] =
OBJECT_ID('tempdb..' + SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1));
これを拡張して、すべてのインデックスの合計スペースを表示できます。これらは #temp テーブルであるため、パーティションごとに集計する必要はありませんでした。