想看看SQL Server里所有表的列都有哪些信息怎么快速搞定
- 问答
- 2026-01-14 05:55:12
- 4
整理自SQL Server技术社区和微软官方文档的常见方法,供快速参考)
要快速查看SQL Server数据库中所有表的列信息,最直接的方法是查询系统视图(System Views),系统视图是SQL Server内置的,里面存放了关于数据库结构(也称为元数据)的各种信息,比如有哪些表、表里有哪些列、列是什么数据类型等,你不需要一个个表去打开看,只需要写一些简单的查询语句,就能一次性拿到所有信息。
最常用的方法:查询 INFORMATION_SCHEMA.COLUMNS
这是符合SQL标准的方法,在不同的数据库系统中(如MySQL, PostgreSQL)语法也类似,比较容易记忆和移植。INFORMATION_SCHEMA 是一个逻辑数据库,里面包含了很多视图,COLUMNS 视图就专门提供了列的信息。
你可以运行下面这个查询语句:
SELECT
TABLE_SCHEMA AS '架构名',
TABLE_NAME AS '表名',
COLUMN_NAME AS '列名',
DATA_TYPE AS '数据类型',
CHARACTER_MAXIMUM_LENGTH AS '最大字符长度',
IS_NULLABLE AS '是否允许空值',
COLUMN_DEFAULT AS '默认值'
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_CATALOG = '你的数据库名' -- 将'你的数据库名'替换成实际的数据库名称
ORDER BY
TABLE_NAME, ORDINAL_POSITION;
解释一下每一列的含义:
- 架构名 (TABLE_SCHEMA):表所属的架构,通常默认是 dbo。
- 表名 (TABLE_NAME):列所在的表的名称。
- 列名 (COLUMN_NAME):列的名称。
- 数据类型 (DATA_TYPE):列的数据类型,int, varchar, datetime 等。
- 最大字符长度 (CHARACTER_MAXIMUM_LENGTH):针对字符型数据类型(如 varchar, char),表示最大能存储多长的字符,对于非字符类型,这里显示的是 NULL。
- 是否允许空值 (IS_NULLABLE):这一列是否允许填入空值(NULL),显示 YES 或 NO。
- 默认值 (COLUMN_DEFAULT):如果列设置了默认值,会在这里显示。
ORDINAL_POSITION是列在表中的顺序号,用于排序。
这个查询的结果会按照表名和列在表中的原始顺序,列出所有列的详细信息,一目了然。
另一种方法:查询 sys.tables 和 sys.columns 系统视图
这是SQL Server更底层的系统视图,能提供更详细、更SQL Server特有的信息,通过连接(JOIN)几个相关的系统视图,可以获取丰富的信息。
SELECT
sch.name AS '架构名',
tobj.name AS '表名',
col.name AS '列名',
tpy.name AS '数据类型',
col.max_length AS '最大长度(字节)',
col.precision AS '精度',
col.scale AS '小数位数',
CASE WHEN col.is_nullable = 1 THEN 'YES' ELSE 'NO' END AS '是否允许空值',
CASE WHEN col.is_identity = 1 THEN 'YES' ELSE 'NO' END AS '是否自增列',
OBJECT_DEFINITION(col.default_object_id) AS '默认值定义'
FROM
sys.tables tobj
INNER JOIN
sys.columns col ON tobj.object_id = col.object_id
INNER JOIN
sys.schemas sch ON tobj.schema_id = sch.schema_id
INNER JOIN
sys.types tpy ON col.system_type_id = tpy.system_type_id
WHERE
tobj.type = 'U' -- 只查询用户表,排除系统表
ORDER BY
tobj.name, col.column_id;
这个方法提供了更多技术细节:
- 最大长度(字节):这里显示的是字节长度,对于
varchar(50),这里会显示50;对于nvarchar(50),因为每个字符占2字节,所以会显示100。 - 精度和小数位数:主要针对数值类型,
decimal(10,2),精度是10,小数位数是2。 - 是否自增列:标识该列是否是标识列(Identity Column),通常用作自动增长的主键。
- 默认值定义:这里会显示默认值的完整定义,
(‘未知’)或(getdate())。
这个方法更适合想深入了解表结构的开发者,信息更全,但语句稍复杂。
使用SQL Server Management Studio (SSMS) 的图形化界面
如果你不喜欢写代码,SSMS提供了非常方便的图形化操作方式:
- 在SSMS的“对象资源管理器”中,连接到你的数据库服务器并展开数据库节点。
- 找到你想要查看的数据库,展开它。
- 展开“表”节点,你会看到数据库下的所有表。
- 展开任意一个表,下面有一个“列”文件夹,点击它,右侧的“对象资源管理器详细信息”窗口(按F7键可以打开)就会列出这个表的所有列、数据类型、是否允许空值等基本信息,你可以在这个窗口里复制信息,或者右键点击“列”文件夹选择“编写表脚本为” -> “CREATE到” -> “新查询编辑器窗口”来生成包含所有列定义的SQL脚本。
生成整个数据库的文档脚本
如果你想得到一个完整的、可保存或打印的脚本,包含所有表的创建语句(自然也就包含了所有列信息),可以使用SSMS的“生成脚本”向导:
- 在对象资源管理器中,右键点击你的数据库。
- 选择“任务” -> “生成脚本”。
- 在向导中,选择“选择特定数据库对象”,然后勾选“表”。
- 点击“高级”按钮,在“要编写的脚本的类型”中,选择“架构和数据”或“仅限架构”。
- 完成向导,它会生成一个巨大的SQL文件,里面是所有表的定义语句。
- 求快、求标准:用第一个
INFORMATION_SCHEMA.COLUMNS查询。 - 要更详细的技术信息:用第二个
sys.*系统视图的查询。 - 不想写代码、临时看一眼:用SSMS的图形界面。
- 想要完整存档或文档:用“生成脚本”功能。
根据你的具体需求,选择最适合的一种方式,就能快速搞定查看所有表列信息的问题了。

本文由畅苗于2026-01-14发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/80379.html
