Dal*_*ale 4 sql-server metadata t-sql
假设我从以下查询中得到一个结果集:
select *
from sys.database_files;
Run Code Online (Sandbox Code Playgroud)
对于任何给定的结果集,我希望能够查询列名和类型,以便我可以创建表来存储结果。
在 T-SQL 中执行此操作的好方法是什么?
参加聚会已经晚了,但只是想我会提到 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;
Run Code Online (Sandbox Code Playgroud)
当然,也有一些限制。如果您有一个包含多个语句的查询,名称中的短语“first_result_set”应该提供一个线索,即您只会收到有关返回数据的第一个语句的信息——例如,它不会在前导处停止SET NOCOUNT ON;
。如果您直接或通过尝试遵循视图或同义词来引用 > 3 部分名称,也会出现问题。但是对于大多数用例来说,这将是一个受欢迎的简化。
早在 12 月,我就在博客上写了更多详细信息,还描述了其他一些元数据增强功能:
怎么样:
SELECT *
INTO YourTableName
FROM sys.database_files;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4418 次 |
最近记录: |