从SQL Select语句获取列列表

时间:2013-10-09 00:08:21

标签: sql sql-server database sql-server-2008

我想知道是否还有从SQL语句中获取列的列表。例如,我有一个简单的SQL语句,如“Select FirstName,LastName From Customer”,我想获取SQL语句中返回的列的列表,在本例中为FirstName和LastName。 SQL语句是动态的,因此直到运行时才知道。

目前我通过动态创建数据库中的视图而不是使用:

SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name = @viewName

比我放弃视图。

这对于获取select语句的列似乎有点戏剧性。

关于如何在不创建和删除视图的情况下进行此操作的任何想法?

提前致谢

2 个答案:

答案 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