sys.tables (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
为 SQL Server 数据库中的每个用户表返回一行。
列名称 | 数据类型 | 描述 |
---|---|---|
<inherited columns> |
有关此视图所继承的列的列表,请参阅 sys.objects (Transact-SQL)。 | |
lob_data_space_id |
int | 对于该表,非零值是存放二进制大型对象 (LOB) 数据的数据空间(文件组或分区方案)的 ID。 LOB 数据类型的示例包括 varbinary(max)、varchar(max)、geography 或 xml。 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 | 1 = 表是 FileTable。 有关 FileTable 的详细信息,请参阅 FileTables (SQL Server)。 适用于:SQL Server 2012 (11.x) 及更高版本和 Azure SQL 数据库 |
is_memory_optimized |
bit | 下面是可能的值: 0 = 非内存优化。 1 = 内存优化。 值 0 为默认值。 内存优化表是内存中的用户表,它的架构保留在磁盘上,与其他用户表类似。 可以从本机编译的存储过程访问内存优化表。 适用于:SQL Server 2014 (12.x) 及更高版本和 Azure SQL 数据库。 |
durability |
tinyint | 以下列出的是可能的值: 0 = SCHEMA_AND_DATA 1 = SCHEMA_ONLY 值为 0 默认值。适用于:SQL Server 2014(12.x)及更高版本,以及Azure SQL 数据库 |
durability_desc |
nvarchar(60) | 下面是可能的值:SCHEMA_ONLY SCHEMA_AND_DATA 指示表是持久内存中表的值 SCHEMA_AND_DATA 。 SCHEMA_AND_DATA 是内存优化表的默认值。 一个值 SCHEMA_ONLY 指示表数据在使用内存优化对象重启数据库时不会持久保存。适用于:SQL Server 2014(12.x)及更高版本,以及Azure SQL 数据库 |
temporal_type |
tinyint | 表示表类型的数值: 0 = NON_TEMPORAL_TABLE 1 = HISTORY_TABLE (与临时表关联)2 = SYSTEM_VERSIONED_TEMPORAL_TABLE 适用于:SQL Server 2016 (13.x) 及更高版本,以及Azure SQL 数据库 |
temporal_type_desc |
nvarchar(60) | 表类型的文本说明:NON_TEMPORAL_TABLE HISTORY_TABLE SYSTEM_VERSIONED_TEMPORAL_TABLE 适用于:SQL Server 2016 (13.x) 及更高版本,以及Azure SQL 数据库 |
history_table_id |
int | 如果 temporal_type 为 2 或 ledger_type 等于 2 , object_id 则返回维护临时表的历史数据的表,否则返回 NULL 。适用于:SQL Server 2016 (13.x) 及更高版本,以及Azure SQL 数据库 |
is_remote_data_archive_enabled |
bit | 指示表是否已启用 Stretch。 0 = 表未启用 Stretch。 1 = 表已启用 Stretch。 有关详细信息,请参阅 Stretch Database。 适用于:SQL Server 2016 (13.x) 及更高版本,以及Azure SQL 数据库 |
is_external |
bit | 指示表是否为外部表。 0 = 表不是外部表。 1 = 表是外部表。 适用于:SQL Server 2016(13.x)及更高版本、Azure SQL 数据库和 Azure Synapse Analytics |
history_retention_period |
int | 表示临时历史记录保留期的持续时间(以指定 history_retention_period_unit 单位为单位)的数值。适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库 |
history_retention_period_unit |
int | 表示临时历史记录保留期单位类型的数值。 -1: INFINITE 0: SECOND 1: MINUTE 2: HOUR 3: DAY 4: WEEK 5: MONTH 6: YEAR 适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库 |
history_retention_period_unit_desc |
nvarchar(10) | 临时历史记录保留期单位类型的文本说明。INFINITE SECOND MINUTE HOUR DAY WEEK MONTH YEAR 适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库 |
is_node |
bit | 1 = 图形节点表。 0 = 不是图形节点表。 适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库 |
is_edge |
bit | 1 = 图形边缘表。 0 = 不是图形边缘表。 适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库 |
data_retention_period |
int | 表示数据保留期的持续时间(以指定data_retention_period_unit 单位为单位)的数值。适用于: 仅限 Azure SQL Edge |
data_retention_period_unit |
int | 表示数据保留期单位类型的数值。 -1: INFINITE 0: SECOND 1: MINUTE 2: HOUR 3: DAY 4: WEEK 5: MONTH 6: YEAR 适用于: 仅限 Azure SQL Edge |
data_retention_period_unit_desc |
nvarchar(10) | 数据保留期单位类型的文本说明。INFINITE SECOND MINUTE HOUR DAY WEEK MONTH YEAR 适用于: 仅限 Azure SQL Edge |
ledger_type |
tinyint | 数值指示表是否为账本表。 0 = NON_LEDGER_TABLE 1 = HISTORY_TABLE (与可更新账本表关联)2 = UPDATABLE_LEDGER_TABLE 3 = APPEND_ONLY_LEDGER_TABLE 有关数据库账本的详细信息,请参阅账本。 适用于:SQL Server 2022(16.x)及更高版本,以及Azure SQL 数据库 |
ledger_type_desc |
nvarchar(60) | 列中值 ledger_type 的文本说明:NON_LEDGER_TABLE HISTORY_TABLE UPDATABLE_LEDGER_TABLE APPEND_ONLY_LEDGER_TABLE 适用于:SQL Server 2022(16.x)及更高版本,以及Azure SQL 数据库 |
ledger_view_id |
int | object_id 返回账本视图时ledger_type IN (2, 3) ,否则返回 NULL 。适用于:SQL Server 2022(16.x)及更高版本,以及Azure SQL 数据库 |
is_dropped_ledger_table |
bit | 指示已删除的账本表。 适用于:SQL Server 2022(16.x)及更高版本,以及Azure SQL 数据库 |
权限
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration。
示例
A. 返回没有主键的所有用户表
下面的示例返回没有主键的所有用户表。
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
B. 列出临时数据相关表
下面的示例展示了如何公开相关的临时数据。
适用于: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;
°C 列出有关临时历史记录保留的信息
下面的示例展示了如何公开有关临时历史记录保留的信息。
适用于:SQL Server 2017 (14.x) 及更高版本和 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;