当前位置: 首页 > news >正文

SQL Server 查询数据库中所有表中所有字段的数据类型及长度

1.查看所有表字段的(数据类型 + 长度描述 + 实际长度(字节))

SELECT s.name AS SchemaName,t.name AS TableName,c.name AS ColumnName,-- 数据类型 + 长度拼接(用于显示)ty.name +CASE WHEN ty.name IN ('char', 'varchar', 'nchar', 'nvarchar') THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX'ELSE CAST(CASE WHEN ty.name IN ('nchar', 'nvarchar') THEN c.max_length / 2ELSE c.max_lengthEND AS VARCHAR)END + ')'WHEN ty.name IN ('decimal', 'numeric') THEN '(' + CAST(c.precision AS VARCHAR) + ',' + CAST(c.scale AS VARCHAR) + ')'ELSE ''END AS DataTypeWithLength,-- 实际长度(字节)c.max_length AS ActualLengthBytes,c.is_nullableFROM sys.columns cINNER JOIN sys.tables t ON c.object_id = t.object_idINNER JOIN sys.schemas s ON t.schema_id = s.schema_idINNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id
ORDER BY s.name, t.name, c.column_id;

说明:
SchemaName:表所属的 schema,例如 dbo

TableName:表名

ColumnName:字段名

DataTypeWithLength:数据类型及长度,如nvarchar(20)

is_nullable:是否允许 NULL(0代表否,1代表是)

2.如果你希望显示“字符长度”而不是字节数,可使用如下SQL

SELECT s.name AS SchemaName,t.name AS TableName,c.name AS ColumnName,-- 数据类型 + 长度/精度拼接ty.name +CASE WHEN ty.name IN ('char', 'varchar', 'nchar', 'nvarchar') THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX'ELSE CAST(CASE WHEN ty.name IN ('nchar', 'nvarchar') THEN c.max_length / 2ELSE c.max_lengthEND AS VARCHAR)END + ')'WHEN ty.name IN ('decimal', 'numeric') THEN '(' + CAST(c.precision AS VARCHAR) + ',' + CAST(c.scale AS VARCHAR) + ')'ELSE ''END AS DataTypeWithLength,-- 实际长度(字节)c.max_length AS ActualLengthBytes,-- 实际长度(字符数)CASE WHEN ty.name IN ('nchar', 'nvarchar') THEN CASE WHEN c.max_length = -1 THEN -1 ELSE c.max_length / 2 ENDELSE CASE WHEN c.max_length = -1 THEN -1 ELSE c.max_length ENDEND AS ActualLengthChars,-- 是否可为空c.is_nullableFROM sys.columns cINNER JOIN sys.tables t ON c.object_id = t.object_idINNER JOIN sys.schemas s ON t.schema_id = s.schema_idINNER JOIN sys.types ty ON c.user_type_id = ty.user_type_idORDER BY s.name, t.name, c.column_id;

说明:
ActualLengthBytes:SQL Server 存储字段时使用的字节数

ActualLengthChars:你定义的字符数,比如 nvarchar(50) 实际为 50 字符,但占用 100 字节

MAX 类型会显示为 -1(表示可变最大)

相关文章:

  • 笔试模拟day1
  • 对比学习(Contrastive Learning)方法详解
  • [Linux入门] Linux安装及管理程序入门指南
  • 数据的聚合
  • GlusterFS分布式文件系统
  • TBvision 静态测试以及生成报告教程
  • <script> 标签的 async 与 defer 属性详解
  • 分子亚型 (by deepseek)
  • 突然虚拟机磁盘只剩下几十K
  • 硬件测试 图吧工具箱分享(附下载链接)
  • 54、错误处理-【源码流程】异常处理流程
  • 【学习笔记】QUIC
  • 【斤斤计较的小Z——KMP / hash】
  • 【IQA技术专题】图像质量评价IQA技术和应用综述(万字长文!!)
  • 【20】番茄叶片病害数据集(有v5/v8模型)/YOLO番茄叶片病害检测
  • 嵌入式系统内核镜像相关(三)
  • 【普及/提高−】P1025 ——[NOIP 2001 提高组] 数的划分
  • C++实现数学功能
  • 2024年12月6级第二套第一篇
  • c++中main函数执行完后还执行其它语句吗?
  • wordpress 浮动定位/铜川网站seo
  • 清河哪里做网站/宁德市是哪个省
  • 网线制作颜色顺序/短视频seo询盘系统
  • 平台网站怎么做的好/seo优化报告
  • 做网站的 视频/西安网站建设排名
  • 做网站的报价方案/网络营销的基本特征