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 = '目標資料表' -- 若需查單一表請取消註解
ORDER BY a.id, a.colorder;
COLUMNPROPERTY 取得精確度與小數位。syscomments 文字定義。MS_Description。將此查詢存為檢視或預存程序,搭配參數化資料表名稱,即可快速產出資料字典文件。