在SQL Server中查找存储过程结果的数据类型和列名称

时间:2018-04-05 18:40:25

标签: sql-server

我使用Dapper作为ORM工具来使用C#代码中的SQL Server数据库。为此,我创建了一个强类型类,它反映了数据库结构,因此很容易在C#和SQL Server之间来回传递对象。

要根据SQL Server表定义快速建模C#类(并编写确保数据层和数据库同步的单元测试),我使用如下查询:

SELECT 
    SchemaName = c.table_schema, TableName = c.table_name, 
    ColumnName = c.column_name, DataType = data_type, 
    MaxLength = ISNULL(c.CHARACTER_MAXIMUM_LENGTH, -1) 
FROM 
    information_schema.columns c 
INNER JOIN 
    information_schema.tables t ON c.table_name = t.table_name 
                                AND c.table_schema = t.table_schema 
                                AND t.table_type = 'BASE TABLE' 
ORDER BY 
    SchemaName, TableName, ordinal_position;

这将返回每个模式和表名及其每个列和数据类型,这使得大多数CRUD样式操作变得简单:

Sample Result

我现在遇到的问题是创建模型类来使用某些存储过程,这些存储过程连接许多表并为很多列使用别名(例如,连接到employee表两次,将第一组员工详细信息别名为ManagerName ,ManagerEmail和第二个设置为WorkerName,WorkerEmail等。这些过程中的一些返回数百列,我不得不通过表定义来查看哪些列需要建模为Int16 / Int32 / Int64等,加上这些程序并不是一成不变的,我不想手动审核这些事情,以确保它们能够同步,如果我可以提供帮助的话。

所以,我的问题是:SQL Server是否提供了一种方法来查看有关存储过程结果集的“元数据”(即,过程将返回的列名和数据类型)?如果没有,SSMS中是否有一个设置会在列名旁边显示数据类型,或者是否会使这项任务变得更容易?或者其他一些创造性的小黑客?

1 个答案:

答案 0 :(得分:2)

根据您的程序编写方式,您可以从sp_describe_first_result_set获得所需内容。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-describe-first-result-set-transact-sql

您需要解析结果集,但更容易手动搜索所有列。