2

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

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

SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name = @viewName

比我放弃的看法。

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

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

提前致谢

4

2 回答 2

1

我经常使用一种非常狡猾的技术,在这种技术中使用错误条件进行选择,例如

Select ..... Where 1=0

这会以相当快的速度返回包含所有列但没有行的结果集。因此,如果在可视环境中运行,您可以看到您拥有哪些列,并且如果从程序/脚本运行,则所有正常的列访问工具都可用。

于 2013-10-09T11:32:08.603 回答
0

您应该可以使用SET FMTONLY它。

SET FMTONLY ON;
(run your query)
SET FMTONLY OFF;

当“仅格式”打开时,SQL Server 不会实际运行查询;它只是返回一个与查询具有相同格式的空结果集(即所有列,只是没有行)。然后,您可以使用您正在使用的任何客户端 API 调查列的架构(例如,如果您使用的是 .NET,则可以使用SqlDataReader .FieldCount、GetFieldType 和 GetName)。

如上面我喜欢的文档页面所述,SET FMTONLY在 SQL Server 2012 中已弃用;因此,如果您以后将应用程序升级到 2012,他们建议sp_describe_first_result_set改为。

于 2013-10-09T12:15:38.100 回答