当前位置:首页 > 问答 > 正文

想看看SQL Server里所有表的列都有哪些信息怎么快速搞定

整理自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提供了非常方便的图形化操作方式:

  1. 在SSMS的“对象资源管理器”中,连接到你的数据库服务器并展开数据库节点。
  2. 找到你想要查看的数据库,展开它。
  3. 展开“表”节点,你会看到数据库下的所有表。
  4. 展开任意一个表,下面有一个“列”文件夹,点击它,右侧的“对象资源管理器详细信息”窗口(按F7键可以打开)就会列出这个表的所有列、数据类型、是否允许空值等基本信息,你可以在这个窗口里复制信息,或者右键点击“列”文件夹选择“编写表脚本为” -> “CREATE到” -> “新查询编辑器窗口”来生成包含所有列定义的SQL脚本。

生成整个数据库的文档脚本

如果你想得到一个完整的、可保存或打印的脚本,包含所有表的创建语句(自然也就包含了所有列信息),可以使用SSMS的“生成脚本”向导:

  1. 在对象资源管理器中,右键点击你的数据库。
  2. 选择“任务” -> “生成脚本”。
  3. 在向导中,选择“选择特定数据库对象”,然后勾选“表”。
  4. 点击“高级”按钮,在“要编写的脚本的类型”中,选择“架构和数据”或“仅限架构”。
  5. 完成向导,它会生成一个巨大的SQL文件,里面是所有表的定义语句。

  • 求快、求标准:用第一个 INFORMATION_SCHEMA.COLUMNS 查询。
  • 要更详细的技术信息:用第二个 sys.* 系统视图的查询。
  • 不想写代码、临时看一眼:用SSMS的图形界面。
  • 想要完整存档或文档:用“生成脚本”功能。

根据你的具体需求,选择最适合的一种方式,就能快速搞定查看所有表列信息的问题了。

想看看SQL Server里所有表的列都有哪些信息怎么快速搞定