假设我从以下查询中得到一个结果集:

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 月发布了更多详细信息,还描述了其他一些元数据增强功能:

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top