sys.columns (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
为包含列的对象(如视图或表)的每一列返回一行。 以下列表包含具有列的对象类型:
- 表值程序集函数 (FT)
- 内联表值 SQL 函数 (IF)
- 内部表 (IT)
- 系统表 (S)
- 表值 SQL 函数 (TF)
- 用户表 (U)
- 视图 (V)
列名称 | 数据类型 | 描述 |
---|---|---|
object_id |
int | 此列所属对象的 ID。 |
name |
sysname | 列的名称。 在对象中是唯一的。 |
column_id |
int | 列的 ID。 在对象中是唯一的。 列 ID 可以不按顺序排列。 |
system_type_id |
tinyint | 列的系统类型的 ID。 |
user_type_id |
int | 用户定义的列类型的 ID。 若要返回类型的名称,请联接此列上的 sys.types 目录视图。 |
max_length |
smallint | 列的最大长度(字节)。-1 = 列数据类型为 varchar(max)、 nvarchar(max)、 varbinary(max)或 xml。对于 文本、 ntext 和 图像 列, max_length 该值为 16 (仅表示 16 字节指针)或设置的值 sp_tableoption 'text in row' 。 |
precision |
tinyint | 如果基于数值,则列的精度;否则,为 0 . |
scale |
tinyint | 如果基于数值,则列的刻度;否则,为 0 . |
collation_name |
sysname | 如果基于字符,则为该列排序规则的名称;否则为 NULL 。 |
is_nullable |
bit | 1 = 列可为 null0 = 列不可为 null |
is_ansi_padded |
bit | 1 = 如果字符、二进制或变体,则列使用 ANSI_PADDING ON 行为0 = 列不是字符、二进制或变体 |
is_rowguidcol |
bit | 1 = 列是声明的 ROWGUIDCOL |
is_identity |
bit | 1 = 列具有标识值 |
is_computed |
bit | 1 = 列是计算列 |
is_filestream |
bit | 1 = 列是 FILESTREAM 列 |
is_replicated |
bit | 1 = 复制列 |
is_non_sql_subscribed |
bit | 1 = 列具有非 SQL Server 订阅服务器 |
is_merge_published |
bit | 1 = 列是合并发布的 |
is_dts_replicated |
bit | 1 = 使用 SSIS 复制列 |
is_xml_document |
bit | 1 = 内容是完整的 XML 文档0 = 内容是文档片段,或者列数据类型不是 xml |
xml_collection_id |
int | 如果列的数据类型为 xml 且已输入 XML,则为非零值。 该值是包含列的验证 XML 架构命名空间的集合的 ID0 = 无 XML 架构集合 |
default_object_id |
int | 默认对象的 ID,无论它是独立对象 sp_bindefault还是内联列级 DEFAULT 约束。 内联列级默认对象的 parent_object_id 列是对该表本身的反引用。0 = 无默认值 |
rule_object_id |
int | 通过使用 绑定到列的独立规则的 ID sys.sp_bindrule. 0 = 无独立规则。 有关列级 CHECK 约束,请参阅 sys.check_constraints。 |
is_sparse |
bit | 1 = 列是稀疏列。 有关详细信息,请参阅 “使用稀疏列”。 |
is_column_set |
bit | 1 = 列是列集。 有关详细信息,请参阅 “使用稀疏列”。 |
generated_always_type |
tinyint | 标识何时生成列值(始终 0 用于系统表中的列)。适用于:SQL Server 2016 (13.x) 及更高版本和 SQL 数据库。 0 = NOT_APPLICABLE 1 = AS_ROW_START 2 = AS_ROW_END 适用于:SQL Server 2022(16.x)及更高版本,以及SQL 数据库。 5 = AS_TRANSACTION_ID_START 6 = AS_TRANSACTION_ID_END 7 = AS_SEQUENCE_NUMBER_START 8 = AS_SEQUENCE_NUMBER_END 有关详细信息,请参阅时态表(关系数据库)。 |
generated_always_type_desc |
nvarchar(60) | 值的文本说明 generated_always_type (始终 NOT_APPLICABLE 用于系统表中的列)适用于:SQL Server 2016 (13.x) 及更高版本和 SQL 数据库。 NOT_APPLICABLE AS_ROW_START AS_ROW_END 适用于:SQL Server 2022(16.x)及更高版本,以及SQL 数据库。 AS_TRANSACTION_ID_START AS_TRANSACTION_ID_END AS_SEQUENCE_NUMBER_START AS_SEQUENCE_NUMBER_END |
encryption_type |
int | 加密类型:1 = 确定性加密2 = 随机加密适用于:SQL Server 2016(13.x)及更高版本,以及SQL 数据库 |
encryption_type_desc |
nvarchar(64) | 加密类型说明:RANDOMIZED DETERMINISTIC 适用于:SQL Server 2016(13.x)及更高版本,以及SQL 数据库 |
encryption_algorithm_name |
sysname | 加密算法的名称。 仅支持 AEAD_AES_256_CBC_HMAC_SHA_512 。适用于:SQL Server 2016(13.x)及更高版本,以及SQL 数据库 |
column_encryption_key_id |
int | 列加密密钥的 ID(CEK)。 适用于:SQL Server 2016(13.x)及更高版本,以及SQL 数据库 |
column_encryption_key_database_name |
sysname | 列加密密钥所在数据库的名称(如果不在列所在的数据库中)。 NULL (如果密钥与列位于同一数据库中)。适用于:SQL Server 2016(13.x)及更高版本,以及SQL 数据库 |
is_hidden |
bit | 指示列是否可以隐藏:0 = 常规列、不隐藏列、可见列1 = 隐藏列适用于:SQL Server 2016(13.x)及更高版本,以及SQL 数据库 |
is_masked |
bit | 指示列是否通过动态数据掩码屏蔽:0 = 常规、非掩码列1 = 列已屏蔽适用于:SQL Server 2016(13.x)及更高版本,以及SQL 数据库 |
graph_type |
int | 具有一组值的内部列。 这些值介于图形列和8 图形列之间1 ,对于NULL 其他列。 |
graph_type_desc |
nvarchar(60) | 标识为仅供参考。 不支持。 不保证以后的兼容性。 |
is_data_deletion_filter_column |
bit | 指示列是否为表的数据保留筛选列。 适用于: Azure SQL Edge |
ledger_view_column_type |
int | NULL 否则,指示账本视图中列的类型:1 = TRANSACTION_ID 2 = SEQUENCE_NUMBER 3 = OPERATION_TYPE 4 = OPERATION_TYPE_DESC 有关详细信息,请参阅 账本概述。 适用于:SQL Server 2022(16.x)及更高版本,以及SQL 数据库 |
ledger_view_column_type_desc |
nvarchar(60) | NULL 如果没有,则包含账本视图中列类型的文本说明:TRANSACTION_ID SEQUENCE_NUMBER OPERATION_TYPE OPERATION_TYPE_DESC 适用于:SQL Server 2022(16.x)及更高版本,以及SQL 数据库 |
is_dropped_ledger_column |
bit | 指示已删除的账本表列。 适用于:SQL Server 2022(16.x)及更高版本,以及SQL 数据库 |
权限
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration。
用法示例
获取表的列详细信息
若要获取表中列的元数据,可以使用以下代码:
CREATE TABLE dbo.[sample] (
id INT NOT NULL
,col1 VARBINARY(10) NULL
)
GO
SELECT c.[name] AS column_name
,t.[name] AS [type_name]
,c.[max_length]
,c.[precision]
,c.[scale]
FROM sys.columns c
INNER JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE object_id = object_id('dbo.sample');