通过 T-SQL 获取结果集的列名
Getting a Result Set's Column Names via T-SQL
有没有办法只使用适用于 2012 年之前版本的 T-SQL 来获取 任意查询 将 return 的列名Microsoft SQL 服务器?
什么不起作用:
- sys.columns 和 INFORMATION_SCHEMA.COLUMNS 非常适合获取表或视图的列列表,但不适用于任意查询。
- sys.dm_exec_describe_first_result 会很完美,只是在 SQL Server 2012 中添加了此管理功能。我正在编写的内容需要向后兼容 SQL Server 2005。
- 自定义 CLR 函数可以轻松提供此信息,但会在服务器端引入部署复杂性。我宁愿不走这条路。
有什么想法吗?
只要任意查询有资格用作嵌套查询(即没有 CTE、唯一列名等),就可以通过将查询的元数据加载到临时文件中来实现 table,然后通过 sys.tables
:
检索列详细信息
SELECT TOP 0 * INTO #t FROM (query goes here) q
SELECT name FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..#t')
DROP TABLE #t
感谢@MartinSmith 推荐这种方法!
有没有办法只使用适用于 2012 年之前版本的 T-SQL 来获取 任意查询 将 return 的列名Microsoft SQL 服务器?
什么不起作用:
- sys.columns 和 INFORMATION_SCHEMA.COLUMNS 非常适合获取表或视图的列列表,但不适用于任意查询。
- sys.dm_exec_describe_first_result 会很完美,只是在 SQL Server 2012 中添加了此管理功能。我正在编写的内容需要向后兼容 SQL Server 2005。
- 自定义 CLR 函数可以轻松提供此信息,但会在服务器端引入部署复杂性。我宁愿不走这条路。
有什么想法吗?
只要任意查询有资格用作嵌套查询(即没有 CTE、唯一列名等),就可以通过将查询的元数据加载到临时文件中来实现 table,然后通过 sys.tables
:
SELECT TOP 0 * INTO #t FROM (query goes here) q
SELECT name FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..#t')
DROP TABLE #t
感谢@MartinSmith 推荐这种方法!