我想知道是否还有从SQL语句中获取列的列表。例如,我有一个简单的SQL语句,如“Select FirstName,LastName From Customer”,我想获取SQL语句中返回的列的列表,在本例中为FirstName和LastName。 SQL语句是动态的,因此直到运行时才知道。
目前我通过动态创建数据库中的视图而不是使用:
SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name = @viewName
比我放弃视图。
这对于获取select语句的列似乎有点戏剧性。
关于如何在不创建和删除视图的情况下进行此操作的任何想法?
提前致谢
答案 0 :(得分:1)
我经常使用一种非常笨拙的技术,其中选择带有错误的条件,如
Select ..... Where 1=0
这会以合理的速度快速返回包含所有列但没有行的结果集。因此,如果在可视化环境中运行,您可以看到您拥有的列,如果从程序/脚本运行,则所有正常的列访问工具都可用。
答案 1 :(得分:0)
您应该可以使用SET FMTONLY
。
SET FMTONLY ON;
(run your query)
SET FMTONLY OFF;
当“仅格式化”打开时,SQL Server实际上不会运行查询;它只返回一个空的结果集,其格式与查询的格式相同(即所有列,只有没有行)。然后,您可以使用您正在使用的任何客户端API调查列的架构(例如,如果您使用的是.NET,则可以使用SqlDataReader。FieldCount,GetFieldType和GetName)。
如上面我喜欢的文档页面所述,SQL Server 2012中不推荐使用SET FMTONLY
;因此,如果您稍后将应用升级到2012,则会建议使用sp_describe_first_result_set
。