Dale Asked: 2011-05-17 09:38:35 +0800 CST2011-05-17 09:38:35 +0800 CST 2011-05-17 09:38:35 +0800 CST 如何从结果集中获取列名和类型的列表? 772 假设我从以下查询返回结果集: select * from sys.database_files; 对于任何给定的结果集,我希望能够查询列名和类型,这样我就可以创建表来存储结果。 在 T-SQL 中执行此操作的好方法是什么? sql-server t-sql 2 个回答 Voted Aaron Bertrand 2011-08-21T08:26:02+08:002011-08-21T08:26:02+08:00 迟到了,但只是想我会提到 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;。如果您直接或通过尝试遵循视图或同义词来引用 > 3 部分名称,也会出现问题。但是对于大多数用例来说,这将是一个受欢迎的简化。 早在 12 月,我就在博客中发布了更多详细信息,还描述了其他一些元数据增强功能: https://sqlblog.org/2010/12/20/sql-server-v-next-denali-metadata-enhancements Best Answer Sankar Reddy 2011-05-17T09:56:42+08:002011-05-17T09:56:42+08:00 怎么样: SELECT * INTO YourTableName FROM sys.database_files;
迟到了,但只是想我会提到 SQL Server Denali 中的元数据增强功能,这将使它更容易 - 不仅检查查询的输出而不运行它(与
SET FMTONLY ON
许多应用程序的行为不太一样今天使用),还可以动态构建目标表(无需从 中提取元数据所涉及的所有解析和案例工作sys.columns
)。这是一个简单的示例 - 请注意,您不必实际运行查询来确定其结果集的形状:当然,有一些限制。如果您有一个包含多个语句的查询,名称中的短语“first_result_set”应该会提供一个线索,即您只会收到有关返回数据的第一个语句的信息- 例如,它不会停在前导处
SET NOCOUNT ON;
。如果您直接或通过尝试遵循视图或同义词来引用 > 3 部分名称,也会出现问题。但是对于大多数用例来说,这将是一个受欢迎的简化。早在 12 月,我就在博客中发布了更多详细信息,还描述了其他一些元数据增强功能:
怎么样: