開發與維護階段常需快速掌握資料表結構:欄位名稱、資料類型、長度、精度、主鍵、識別欄、預設值、說明等。本文提供一支查詢系統目錄視圖的 T-SQL 腳本,一次輸出資料表所有欄位的完整定義資訊,適合納入 DBA 工具箱或文件產生器。
SELECT
表名 = CASE WHEN a.colorder = 1 THEN d.name ELSE '' END,
表說明 = CASE WHEN a.colorder = 1 THEN ISNULL(f.value, '') ELSE '' END,
欄位序號 = a.colorder,
欄位名 = a.name,
識別欄 = CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√' ELSE '' END,
主鍵 = CASE WHEN EXISTS (
SELECT 1 FROM sysobjects WHERE xtype = 'PK' AND name IN (
SELECT name FROM sysindexes WHERE indid IN (
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid = a.colid
)
)
) THEN '√' ELSE '' END,
類型 = b.name,
佔用位元組 = a.length,
長度 = COLUMNPROPERTY(a.id, a.name, 'PRECISION'),
小數位數 = ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0),
允許空值 = CASE WHEN a.isnullable = 1 THEN '√' ELSE '' END,
預設值 = ISNULL(e.text, ''),
欄位說明 = ISNULL(g.[value], '')
FROM syscolumns a
LEFT JOIN systypes b ON a.xtype = b.xusertype
INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.name <> 'dtproperties'
LEFT JOIN syscomments e ON a.cdefault = e.id
LEFT JOIN sysproperties g ON a.id = g.id AND a.colid = g.smallid
LEFT JOIN sysproperties f ON d.id = f.id AND f.smallid = 0
-- WHERE d.name = 'YourTableName' -- 指定表名時啟用
ORDER BY a.id, a.colorder;
| 輸出欄位 | 來源/邏輯 |
|---|---|
| 表名/表說明 | sysobjects + sysproperties (smallid=0),僅首列顯示避免重複 |
| 識別欄 | COLUMNPROPERTY(..., 'IsIdentity') |
| 主鍵 | 透過 sysobjects(PK) → sysindexes → sysindexkeys 關聯判斷 |
| 類型/長度/精度/小數位 | systypes + COLUMNPROPERTY(PRECISION/Scale) |
| 預設值 | syscomments (透過 cdefault 關聯) |
| 欄位說明 | sysproperties (extended properties, smallid=colid) |
WHERE d.name = '表名' 可查詢特定表。sys.columns, sys.tables, sys.extended_properties 等新目錄視圖,語法更標準。