如何从结果集中获取列名称和类型的列表?
-
16-10-2019 - |
题
假设我从以下查询中得到一个结果集:
select *
from sys.database_files;
对于任何给定的结果集,我希望能够查询列名称和类型,以便我可以创建表来存储结果。
在 T-SQL 中执行此操作的好方法是什么?
解决方案
怎么样:
SELECT *
INTO YourTableName
FROM sys.database_files;
其他提示
来晚了,但只是想我会提到 SQL Server Denali 中的元数据增强功能,这将使操作变得更加容易 - 不仅可以在不运行查询的情况下检查查询的输出(与 SET FMTONLY ON
, ,现在许多应用程序都在使用),而且还可以动态构建目标表(无需从其中提取元数据所涉及的所有解析和案例工作) sys.columns
)。这是一个简单的示例 - 请注意,您不必实际运行查询来找出其结果集的形状:
DECLARE @sql NVARCHAR(MAX) = N'SELECT * FROM sys.database_files';
SELECT name, system_type_name, collation_name
FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 0)
ORDER BY column_ordinal;
当然,也有一些限制。如果您有一个包含多个语句的查询,名称中的短语“first_result_set”应该给出一个线索,表明您只会收到有关第一个语句的信息 返回数据 - 它不会停在领先位置 SET NOCOUNT ON;
例如。如果您直接或通过尝试遵循视图或同义词来引用由三部分组成的名称,也会出现问题。但对于大多数用例来说,这将是一个受欢迎的简化。
我在 12 月发布了更多详细信息,还描述了其他一些元数据增强功能:
不隶属于 dba.stackexchange