You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取SQL Server存储过程结果的数据类型与列名?

用Dapper操作SQL Server时,快速生成C#强类型类的实用方案

我平时用C#结合Dapper做SQL Server数据库开发的时候,一直偏爱用和数据库表结构一一对应的强类型类来做对象映射——不管是从数据库查数据转成C#对象,还是把C#对象存回数据库,都省心又不容易出错。

为了能快速基于SQL Server的表定义生成对应的强类型类,还能写单元测试确保数据层和数据库结构始终同步,我一直在用下面这个SQL查询语句:

SELECT 
    SchemaName = c.table_schema,
    TableName = c.table_name,
    ColumnName = c.column_name,
    SqlDataType = c.data_type,
    IsNullable = c.is_nullable,
    MaxLength = c.character_maximum_length,
    NumericPrecision = c.numeric_precision,
    NumericScale = c.numeric_scale
FROM 
    information_schema.columns c
INNER JOIN 
    information_schema.tables t ON c.table_schema = t.table_schema AND c.table_name = t.table_name
WHERE 
    t.table_type = 'BASE TABLE' -- 仅查询实体表,排除视图
ORDER BY 
    c.table_schema, c.table_name, c.ordinal_position

这个查询的实用价值

  • 它会从SQL Server的系统视图information_schema里提取所有实体表的核心信息:包括表的架构、表名、列名、SQL数据类型、列是否允许为空、字符类型的最大长度,还有数值类型的精度和小数位数。这些信息刚好是我们编写C#强类型类时的关键参考。
  • 你可以把查询结果导出成CSV,或者直接在SSMS里查看,对照着就能快速写出对应的C#类——比如SQL的nvarchar(50)对应C#的string,int对应int,bit对应bool,datetime对应DateTime,如果列允许为空,就用可空类型(比如int?、DateTime?)。
  • 要是想更进一步自动化,还可以基于这个查询的结果写个小工具(比如C#控制台程序),直接生成对应的类文件,彻底省去手动敲代码的麻烦。
  • 做单元测试的时候,你可以定期运行这个查询,把结果和现有C#类的属性做对比,一旦数据库表结构有改动,就能第一时间发现数据层的类需要更新,避免出现对象映射错误。

内容的提问来源于stack exchange,提问作者Dave Smash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:11:55