Sql-Server
如何從結果集中獲取列名和類型的列表?
假設我從以下查詢返回結果集:
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 月,我就在部落格中發布了更多詳細資訊,還描述了其他一些元數據增強功能: