假设你没有用三个连续的下划线命名你的#temp 表,这应该只选择你的#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 表。