Sql-Server

如何從結果集中獲取列名和類型的列表?

  • January 23, 2018

假設我從以下查詢返回結果集:

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;。如果您直接或通過嘗試遵循視圖或同義詞來引用 > 3 部分名稱,也會出現問題。但是對於大多數案例來說,這將是一個受歡迎的簡化。

早在 12 月,我就在部落格中發布了更多詳細資訊,還描述了其他一些元數據增強功能:

引用自:https://dba.stackexchange.com/questions/2743