共用方式為


sys.internal_tables (Transact-SQL)

針對每個內部資料表物件,各傳回一個資料列。 SQL Server 會自動產生內部資料表來支援各種功能。 例如,當您建立主要 XML 索引時,SQL Server 就會自動建立內部資料表來保存零碎的 XML 文件資料。 內部資料表會出現在每個資料庫的 sys 結構描述中,而且會具有系統產生的唯一名稱,以便表示其功能,例如 xml_index_nodes_2021582240_32001queue_messages_1977058079

內部資料表不包含使用者可存取的資料,而且其結構描述是固定且無法變更的。 您無法在 Transact-SQL 陳述式中參考內部資料表名稱。 例如,您無法執行 SELECT * FROM <sys.internal_table_name> 等陳述式。 不過,您可以查詢目錄檢視來查看內部資料表的中繼資料。

資料行名稱

資料類型

說明

<繼承 sys.objects 的資料行>

 

如需這份檢視所繼承的資料行清單,請參閱<sys.objects (Transact-SQL)>。

internal_type

tinyint

內部資料表的類型:

201 = queue_messages

202 = xml_index_nodes

203 = fulltext_catalog_freelist

204 = fulltext_catalog_map

205 = query_notification

206 = service_broker_map

207 = extended_indexes (例如,空間索引)

208 = filestream_tombstone

209 = change_tracking

210 = tracked_committed_transactions

internal_type_desc

nvarchar(60)

內部資料表類型的描述:

QUEUE_MESSAGES

XML_INDEX_NODES

FULLTEXT_CATALOG_FREELIST

FULLTEXT_CATALOG_MAP

QUERY_NOTIFICATION

SERVICE_BROKER_MAP

EXTENDED_INDEXES

FILESTREAM_TOMBSTONE

CHANGE_TRACKING

TRACKED_COMMITTED_TRANSACTIONS

parent_id

int

父系的識別碼,不論是否以結構描述為範圍,都是如此。 否則,在沒有父系的狀況下,便是 0。

queue_messages = 佇列的 object_id

xml_index_nodes = xml 索引的 object_id

fulltext_catalog_freelist = 全文檢索目錄的 fulltext_catalog_id

fulltext_index_map = 全文檢索索引的 object_id

query_notificationservice_broker_map = 0

extended_indexes = 擴充索引的 object_id,例如,空間索引

啟用其資料表追蹤之資料表的 object_id = change_tracking

parent_minor_id

int

父系的次要識別碼。

xml_index_nodes = XML 索引的 index_id

extended_indexes = 擴充索引的 index_id,例如,空間索引

0 = queue_messagesfulltext_catalog_freelistfulltext_index_mapquery_notificationservice_broker_mapchange_tracking

lob_data_space_id

int

非零值是存放這份資料表的大型物件 (LOB) 之資料空間 (檔案群組或資料分割結構描述) 的識別碼。

filestream_data_space_id

int

保留以供日後使用。

權限

目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。如需詳細資訊,請參閱<中繼資料可見性組態>。

備註

內部資料表會與父實體放置於相同的檔案群組中。 您可以使用下列範例 F 中顯示的目錄查詢,傳回內部資料表針對同資料列、資料列外和大型物件 (LOB) 資料所使用的頁面數。

您可以使用 sp_spaceused 系統程序來傳回內部資料表的空間使用資料。 sp_spaceused 會使用下列方式來報告內部資料表的空間:

  • 當您指定佇列名稱後,就會參考與此佇列相關聯的基礎內部資料表,並且報告其儲存耗用量。

  • XML 索引、空間索引和全文檢索索引之內部資料表所使用的頁面會包含在 index_size 資料行中。 當您指定資料表或索引檢視表名稱後,該物件之 XML 索引、空間索引和全文檢索索引的頁面就會包含在資料行 reservedindex_size 中。

範例

下列範例將說明如何使用目錄檢視來查詢內部資料表中繼資料。

A.顯示從 sys.objects 目錄檢視繼承資料行的內部資料表

SELECT * FROM sys.objects WHERE type = 'IT';

B.傳回所有內部資料表中繼資料 (包括從 sys.objects 繼承的資料行)

SELECT * FROM sys.internal_tables;

C.傳回內部資料表的資料行和資料行資料類型

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    ,typ.name AS column_data_type 
    ,col.*
FROM sys.internal_tables AS itab
JOIN sys.columns AS col ON itab.object_id = col.object_id
JOIN sys.types AS typ ON typ.user_type_id = col.user_type_id
ORDER BY itab.name, col.column_id;

D.傳回內部資料表索引

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    , itab.name AS internal_table_name
    , idx.*
FROM sys.internal_tables AS itab
JOIN sys.indexes AS idx ON itab.object_id = idx.object_id
ORDER BY itab.name, idx.index_id;

E.傳回內部資料表統計資料

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    , s.*
FROM sys.internal_tables AS itab
JOIN sys.stats AS s ON itab.object_id = s.object_id
ORDER BY itab.name, s.stats_id;

F.傳回內部資料表的資料分割和配置單位資訊

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    ,idx.name AS heap_or_index_name
    ,p.*
    ,au.*
FROM sys.internal_tables AS itab
JOIN sys.indexes AS idx
--     JOIN to the heap or the clustered index
    ON itab.object_id = idx.object_id AND idx.index_id IN (0,1)
JOIN   sys.partitions AS p 
    ON p.object_id = idx.object_id AND p.index_id = idx.index_id
JOIN   sys.allocation_units AS au
--     IN_ROW_DATA (type 1) and ROW_OVERFLOW_DATA (type 3) => JOIN to partition's Hobt
--     else LOB_DATA (type 2) => JOIN to the partition ID itself.
ON au.container_id =  
    CASE au.type 
        WHEN 2 THEN p.partition_id 
        ELSE p.hobt_id 
    END
ORDER BY itab.name, idx.index_id;

G.傳回 XML 索引的內部資料表中繼資料

SELECT t.name AS parent_table
    ,t.object_id AS parent_table_id
    ,it.name AS internal_table_name
    ,it.object_id AS internal_table_id
    ,xi.name AS primary_XML_index_name
    ,xi.index_id as primary_XML_index_id
FROM sys.internal_tables AS it
JOIN sys.tables AS t 
    ON it.parent_id = t.object_id
JOIN sys.xml_indexes AS xi 
    ON it.parent_id = xi.object_id
    AND it.parent_minor_id  = xi.index_id
WHERE it.internal_type_desc = 'XML_INDEX_NODES';
GO

H.傳回 Service Broker 佇列的內部資料表中繼資料

SELECT q.name AS queue_name
    ,q.object_id AS queue_id
    ,it.name AS internal_table_name
    ,it.object_id AS internal_table_id
FROM sys.internal_tables AS it
JOIN sys.service_queues  AS  q ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO

I.傳回所有 Service Broker 服務的內部資料表中繼資料

SELECT * 
FROM tempdb.sys.internal_tables 
WHERE internal_type_desc = 'SERVICE_BROKER_MAP';
GO

請參閱

參考

目錄檢視 (Transact-SQL)

物件目錄檢視 (Transact-SQL)