共用方式為


sys.internal_tables (Transact-SQL)

適用於:SQL Server

針對內部數據表的每個物件,各傳回一個數據列。 SQL Server 會自動產生內部數據表以支援各種功能。 例如,當您建立主要 XML 索引時,SQL Server 會自動建立內部資料表來保存已切割的 XML 文件數據。 內部資料表會出現在每個資料庫的架構中 sys ,並具有唯一且系統產生的名稱,以指出其函式,例如 xml_index_nodes_2021582240_32001queue_messages_1977058079

資料行名稱 資料類型 描述
繼承自的數據行 sys.objects 如需此檢視繼承的數據行清單,請參閱 sys.objects
internal_type tinyint 內部資料表的類型:

3 = QUERY_DISK_STORE_QUERY_HINTS
4 = QUERY_DISK_STORE_QUERY_TEMPLATE_PARAMETERIZATION
6 = QUERY_DISK_STORE_WAIT_STATS
201 = QUEUE_MESSAGES
202 = XML_INDEX_NODES
203 = FULLTEXT_CATALOG_FREELIST
204 = FULLTEXT_INDEX_MAP
205 = QUERY_NOTIFICATION
206 = SERVICE_BROKER_MAP
207 = EXTENDED_INDEXES (例如空間索引)
208 = FILESTREAM_TOMBSTONE
209 = CHANGE_TRACKING
210 = TRACKED_COMMITTED_TRANSACTIONS
220 = CONTAINED_FEATURES
225 = FILETABLE_UPDATES
236 = SELECTIVE_XML_INDEX_NODE_TABLE
240 = QUERY_DISK_STORE_QUERY_TEXT
241 = QUERY_DISK_STORE_QUERY
242 = QUERY_DISK_STORE_PLAN
243 = QUERY_DISK_STORE_RUNTIME_STATS
244 = QUERY_DISK_STORE_RUNTIME_STATS_INTERVAL
245 = QUERY_CONTEXT_SETTINGS
internal_type_desc nvarchar(60) 內部資料表型態的描述:

QUERY_DISK_STORE_QUERY_HINTS
QUERY_DISK_STORE_QUERY_TEMPLATE_PARAMETERIZATION
QUERY_DISK_STORE_WAIT_STATS
QUEUE_MESSAGES
XML_INDEX_NODES
FULLTEXT_CATALOG_FREELIST
FULLTEXT_INDEX_MAP
QUERY_NOTIFICATION
SERVICE_BROKER_MAP
EXTENDED_INDEXES
FILESTREAM_TOMBSTONE
CHANGE_TRACKING
TRACKED_COMMITTED_TRANSACTIONS
CONTAINED_FEATURES
FILETABLE_UPDATES
SELECTIVE_XML_INDEX_NODE_TABLE
QUERY_DISK_STORE_QUERY_TEXT
QUERY_DISK_STORE_QUERY
QUERY_DISK_STORE_PLAN
QUERY_DISK_STORE_RUNTIME_STATS
QUERY_DISK_STORE_RUNTIME_STATS_INTERVAL
QUERY_CONTEXT_SETTINGS
parent_id int 父系的標識碼,不論其是否為架構範圍。 否則, 0 如果沒有父代則為 。

queue_messages = object_id 佇列的

xml_index_nodes = object_id 的 XML 索引

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 = index_id 的 XML 索引
extended_indexes = index_id 的擴充索引,例如空間索引

0 = queue_messagesfulltext_catalog_freelistfulltext_index_mapquery_notification、、 service_broker_mapchange_tracking
lob_data_space_id int 非零值是保存此數據表之大型物件 (LOB) 資料空間的標識碼(檔案群組或數據分割配置)。
filestream_data_space_id int 保留供未來使用。

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

權限

目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。 如需相關資訊,請參閱 Metadata Visibility Configuration

備註

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

您可以使用 sp_spaceused 系統程式傳回內部資料表的空間使用量數據。 sp_spaceused 以下欄取報告內部資料表空間:

  • 指定佇列名稱時,會參考與佇列相關聯的基礎內部數據表,並報告其記憶體耗用量。

  • XML 索引、空間索引和全文檢索索引的內部數據表所使用的頁面會包含在數據行中 index_size 。 指定數據表或索引檢視表名稱時,該物件的 XML 索引、空間索引和全文檢索索引的頁面會包含在數據行和 index_sizereserved

範例

下列範例示範如何使用目錄檢視來查詢內部數據表元數據。

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
     INNER JOIN sys.columns AS col
         ON itab.object_id = col.object_id
     INNER 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
     INNER 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
     INNER 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
     INNER 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)
     INNER JOIN sys.partitions AS p
         ON p.object_id = idx.object_id
        AND p.index_id = idx.index_id
     INNER 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
     INNER JOIN sys.tables AS t
         ON it.parent_id = t.object_id
     INNER 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
     INNER JOIN sys.service_queues AS q
         ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO

一. 傳回所有 Service Broker 服務的內部數據表元數據

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