我使用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样式操作变得简单:
我现在遇到的问题是创建模型类来使用某些存储过程,这些存储过程连接许多表并为很多列使用别名(例如,连接到employee表两次,将第一组员工详细信息别名为ManagerName ,ManagerEmail和第二个设置为WorkerName,WorkerEmail等。这些过程中的一些返回数百列,我不得不通过表定义来查看哪些列需要建模为Int16 / Int32 / Int64等,加上这些程序并不是一成不变的,我不想手动审核这些事情,以确保它们能够同步,如果我可以提供帮助的话。
所以,我的问题是:SQL Server是否提供了一种方法来查看有关存储过程结果集的“元数据”(即,过程将返回的列名和数据类型)?如果没有,SSMS中是否有一个设置会在列名旁边显示数据类型,或者是否会使这项任务变得更容易?或者其他一些创造性的小黑客?
答案 0 :(得分:2)
根据您的程序编写方式,您可以从sp_describe_first_result_set
获得所需内容。
您需要解析结果集,但更容易手动搜索所有列。