Sql-Server-2012
如何從系統表或視圖中獲取列,如 sys.database_files (SQL Server 2012)
如何編寫查詢以返回例如
sys.database_files
表的所有列?我看到很多關於使用 information_schema.columns 獲取使用者數據庫/表的表名的建議,但我不知道如何為系統表執行此操作。我看到 sys.database_files 是主表下的一個視圖。我正在使用 SQL Server 2012。
由於您使用的是 SQL Server 2012,因此最好使用新的 DMF
sys.dm_exec_describe_first_result_set
。此 dmf 將一個 transact-SQL 語句作為參數,並描述該語句的第一個結果集的元數據。因此,例如,您想找出列名以及數據類型和精度
sys.database_files
,只需使用SELECT name, system_type_name, is_nullable -- add/remove columns as per your need .... FROM sys.dm_exec_describe_first_result_set ( N'SELECT * FROM sys.database_files;', NULL, 0 ) AS f ORDER BY column_ordinal;
以下是結果:
對於 sql 2012 以下的版本:
SELECT object_NAME(c.object_id) AS OBJECT_NAME ,c.NAME AS COLUMN_NAME ,t.NAME AS DATA_TYPE ,c.max_length AS MAX_LENGTH FROM sys.all_columns c INNER JOIN sys.types t ON t.system_type_id = c.system_type_id WHERE object_name(c.object_id) = 'database_files'
優秀的文章由Aaron Bertrand撰寫——SQL Server v.Next (Denali):元數據增強,詳細解釋了這一點。此外,請參閱文章下方部分中的CAVEATS。
我看到許多關於使用 information_schema.columns 獲取使用者數據庫/表的表名的建議。
避免使用 INFORMATION_SCHEMA 視圖。值得一讀 Aaron 關於反對 INFORMATION_SCHEMA 意見的文章。