sys.tables (Transact-SQL)

适用于:yesSQL Server(所有受支持的版本)YesAzure SQL 数据库YesAzure SQL 托管实例yesAzure Synapse AnalyticsyesAnalytics Platform System (PDW)

为 SQL Server 中的每个用户表返回一行。

列名称 数据类型 说明
<inherited columns> 有关此视图所继承的列的列表,请参阅 sys.objects (Transact-SQL)
lob_data_space_id int 对于该表,非零值是存放二进制大型对象 (LOB) 数据的数据空间(文件组或分区方案)的 ID。 LOB 数据类型的示例包括 varbinary(max)varchar(max)geographyxml

0 = 表没有 LOB 数据。
filestream_data_space_id int FILESTREAM 文件组或包含 FILESTREAM 文件组的分区方案的数据空间 ID。

若要报告 FILESTREAM 文件组的名称,请执行查询 SELECT FILEGROUP_NAME (filestream_data_space_id) FROM sys.tables

sys.tables 可以按 filestream_data_space_id = data_space_id 与下列视图联接。

- sys.filegroups

- sys.partition_schemes

- sys.indexes

- sys.allocation_units

- sys.fulltext_catalogs

- sys.data_spaces

- sys.destination_data_spaces

- sys.master_files

- sys.database_files

- backupfilegroup(按 filegroup_id 联接)
max_column_id_used int 此表曾使用的最大列 ID。
lock_on_bulk_load bit 大容量加载期间将锁定表。 有关详细信息,请参阅 sp_tableoption (Transact-SQL)
uses_ansi_nulls bit 在创建表时,将 SET ANSI_NULLS 数据库选项设置为 ON。
is_replicated bit 1 = 使用快照复制或事务复制发布表。
has_replication_filter bit 1 = 表具有复制筛选器。
is_merge_published bit 1 = 使用合并复制发布表。
is_sync_tran_subscribed bit 1 = 使用立即更新订阅来订阅表。
has_unchecked_assembly_data bit 1 = 表包含依赖于上次 ALTER ASSEMBLY 期间定义发生更改的程序集的持久化数据。 在下一次成功执行 DBCC CHECKDB 或 DBCC CHECKTABLE 后将重置为 0。
text_in_row_limit int Text in row 允许的最大字节数。

0 = 未设置 text in row 选项。 有关详细信息,请参阅 sp_tableoption (Transact-SQL)
large_value_types_out_of_row bit 1 = 在行外存储大值类型。 有关详细信息,请参阅 sp_tableoption (Transact-SQL)
is_tracked_by_cdc bit 1 = 为表启用变更数据捕获。 有关详细信息,请参阅 sys.sp_cdc_enable_table (Transact-SQL)
lock_escalation tinyint 表的 LOCK_ESCALATION 选项的值如下:

0 = TABLE

1 = DISABLE

2 = AUTO
lock_escalation_desc nvarchar(60) 表的 lock_escalation 选项的文本说明。 可能的值有:TABLE、AUTO 和 DISABLE。
is_filetable bit 适用于:SQL Server 2012 (11.x) 及更高版本和 Azure SQL 数据库。

1 = 表是 FileTable。

有关 FileTable 的详细信息,请参阅 FileTables (SQL Server)
持久性 tinyint 适用于:SQL Server 2014 (12.x) 及更高版本和 Azure SQL 数据库。

以下列出的是可能的值:

0 = SCHEMA_AND_DATA

1 = SCHEMA_ONLY

值 0 为默认值。
durability_desc nvarchar(60) 适用于:SQL Server 2014 (12.x) 及更高版本和 Azure SQL 数据库。

下面是可能的值:

SCHEMA_ONLY

SCHEMA_AND_DATA

SCHEMA_AND_DATA 的值指示表是持久内存中表。 SCHEMA_AND_DATA 是内存优化表的默认值。 SCHEMA_ONLY 的值指示,在重新启动包含内存优化对象的数据库后,表数据将不会持久化。
is_memory_optimized bit 适用于:SQL Server 2014 (12.x) 及更高版本和 Azure SQL 数据库。

下面是可能的值:

0 = 非内存优化。

1 = 内存优化。

值 0 为默认值。

内存优化表是内存中的用户表,它的架构保留在磁盘上,与其他用户表类似。 可以从本机编译的存储过程访问内存优化表。
temporal_type tinyint 适用于:SQL Server 2016 (13.x) 及更高版本和 Azure SQL 数据库。

表示表类型的数值:

0 = NON_TEMPORAL_TABLE

1 = HISTORY_TABLE(与时态表相关联)

2 = SYSTEM_VERSIONED_TEMPORAL_TABLE
temporal_type_desc nvarchar(60) 适用于:SQL Server 2016 (13.x) 及更高版本和 Azure SQL 数据库。

表类型的文本说明:

NON_TEMPORAL_TABLE

HISTORY_TABLE

SYSTEM_VERSIONED_TEMPORAL_TABLE
history_table_id int 适用于:SQL Server 2016 (13.x) 及更高版本和 Azure SQL 数据库。

当 temporal_type = 2 或 ledger_type = 2 时,返回保留时态表历史数据的表的 object_id,否则将返回 NULL。
is_remote_data_archive_enabled bit 适用于:SQL Server 2016 (13.x) 及更高版本和 Azure SQL 数据库

指示表是否已启用 Stretch。

0 = 表未启用 Stretch。

1 = 表已启用 Stretch。

有关详细信息,请参阅 Stretch Database
is_external bit 适用于:SQL Server 2016 (13.x) 及更高版本、Azure SQL 数据库和 Azure Synapse Analytics。

指示表是否为外部表。

0 = 表不是外部表。

1 = 表是外部表。
history_retention_period int 适用于: Azure SQL 数据库。

表示临时历史记录保留期的数值,以使用 history_retention_period_unit 指定的单位表示。
history_retention_period_unit int 适用于: Azure SQL 数据库。

表示临时历史记录保留期单位类型的数值。

-1:INFINITE

3:DAY

4:WEEK

5:MONTH

6:YEAR
history_retention_period_unit_desc nvarchar(10) 适用于: Azure SQL 数据库。

临时历史记录保留期单位类型的文本说明。

INFINITE

DAY

WEEK

MONTH

YEAR
is_node bit 适用范围:SQL Server 2017 (14.x) 和 Azure SQL 数据库。

1 = 这是图形节点表。

0 = 这不是图形节点表。
is_edge bit 适用于: Azure SQL 数据库。

1 = 这是图形边表。

0 = 这不是图形边表。
ledger_type tinyint 适用于:SQL Server 2022 及更高版本、Azure SQL 数据库。

数值指示表是否为账本表。

0 = NON_LEDGER_TABLE
1 = HISTORY_TABLE(与可更新的账本表相关联)
2 = UPDATABLE_LEDGER_TABLE
3 = APPEND_ONLY_LEDGER_TABLE

有关数据库账本的详细信息,请参阅账本
ledger_type_desc nvarchar(60) 适用于:SQL Server 2022 及更高版本、Azure SQL 数据库。

ledger_type 列中值的文本说明:

NON_LEDGER_TABLE
HISTORY_TABLE
UPDATABLE_LEDGER_TABLE
APPEND_ONLY_LEDGER_TABLE
ledger_view_id int 适用于:SQL Server 2022 及更高版本、Azure SQL 数据库。

当 ledger_type 为 (2,3) 时,返回账本视图的 object_id,否则将返回 NULL。
is_dropped_ledger_table bit 适用于:SQL Server 2022 及更高版本、Azure SQL 数据库。

指示已删除的账本表。

权限

目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration

示例

下面的示例返回没有主键的所有用户表。

SELECT SCHEMA_NAME(schema_id) AS schema_name  
    ,name AS table_name   
FROM sys.tables   
WHERE OBJECTPROPERTY(object_id,'TableHasPrimaryKey') = 0  
ORDER BY schema_name, table_name;  
GO  
  

下面的示例展示了如何公开相关的临时数据。

适用于:SQL Server 2016 (13.x) 及更高版本和 Azure SQL 数据库。

SELECT T1.object_id, T1.name as TemporalTableName, SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema,  
T2.name as HistoryTableName, SCHEMA_NAME(T2.schema_id) AS HistoryTableSchema,  
T1.temporal_type_desc  
FROM sys.tables T1  
LEFT JOIN sys.tables T2   
ON T1.history_table_id = T2.object_id  
ORDER BY T1.temporal_type desc  

下面的示例展示了如何公开有关临时历史记录保留的信息。

适用于: Azure SQL 数据库。

SELECT DB.is_temporal_history_retention_enabled, SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema, 
T1.name as TemporalTableName, SCHEMA_NAME(T2.schema_id) AS HistoryTableSchema, T2.name as HistoryTableName,
T1.history_retention_period, T1.history_retention_period_unit_desc
FROM sys.tables T1  
OUTER APPLY (select is_temporal_history_retention_enabled from sys.databases where name = DB_NAME()) DB
LEFT JOIN sys.tables T2   
ON T1.history_table_id = T2.object_id WHERE T1.temporal_type = 2 

另请参阅

对象目录视图 (Transact-SQL)
目录视图 (Transact-SQL)
DBCC CHECKDB (Transact-SQL)
DBCC CHECKTABLE (Transact-SQL)
查询 SQL Server 系统目录常见问题
内存中 OLTP(内存中优化)