在 SQL SERVER 中
SP_HELP 'table_name'
返回每列的描述,包括它的类型、长度、可空状态等。我正在使用此信息自动生成 DTO(类)和映射。
如果我想为内联 SQL 语句(包括别名、连接等)执行此操作,我会临时创建一个视图,其定义是我的 SQL 语句,然后为该视图运行 sp_help - 这给了我所需的一切。之后我只是删除视图。
问题:
有没有其他更简单的方法来获取内联 SQL 的这些信息——最好不通过视图创建?
在 SQL SERVER 中
SP_HELP 'table_name'
返回每列的描述,包括它的类型、长度、可空状态等。我正在使用此信息自动生成 DTO(类)和映射。
如果我想为内联 SQL 语句(包括别名、连接等)执行此操作,我会临时创建一个视图,其定义是我的 SQL 语句,然后为该视图运行 sp_help - 这给了我所需的一切。之后我只是删除视图。
问题:
有没有其他更简单的方法来获取内联 SQL 的这些信息——最好不通过视图创建?
是的。SQL Server 中的所有对象定义都可以作为表或视图使用。这些元数据源统称为“目录”。
行业标准方式是通过信息模式视图。但是,我听说 SQL Server 的实现可能有点粗糙。
还有一组名称,如sys.tables、 sys.views 等。这些是最常用的。
一组程序 API 被发布,称为服务器管理对象(SMO)。这些可以提供元数据或脚本整个对象。它们是 SSMS 对象资源管理器使用的。文档可能很简洁,但如果你坚持下去,它会非常强大。可以从 C#、powershell 或其他语言调用 SMO。
要为任意查询创建 DTO,我将引用返回的各个列的目录视图。坦率地说,您创建瞬态视图的技术与任何方法一样好。您还可以使用
select .. into #SomeName
. 临时表超出范围时会自行清除。同样将查询包装在临时存储的过程中并使用sys.dm_exec_describe_first_result_set。似乎是最好的解决方案。无需包装。