| 系統表 | 用途 |
|---|---|
sysobjects | 資料庫物件目錄(表、視圖、預存程序、函數等) |
syscolumns | 資料行/欄位定義 |
syscomments | 預存程序、視圖、觸發器等的原始碼文字 |
sysindexes / sysindexkeys | 索引與鍵值資訊 |
SELECT name
FROM sysobjects
WHERE xtype = 'U' AND status >= 0;
xtype='U' = 使用者表,status>=0 排除系統內部表。
SELECT name
FROM syscolumns
WHERE id = OBJECT_ID('表名');
SELECT a.*
FROM sysobjects a, syscomments b
WHERE a.id = b.id
AND b.text LIKE '%表名%';
透過 syscomments.text 全文搜尋物件定義中引用的表名。
SELECT name AS 預存程序名稱
FROM sysobjects
WHERE xtype = 'P';
xtype='P' = 預存程序。
SELECT
CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,
a.colorder AS 欄位序號,
a.name AS 欄位名,
CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√' ELSE '' END AS 識別欄,
CASE WHEN EXISTS (
SELECT 1 FROM sysindexes si
JOIN sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid
JOIN syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid
JOIN sysobjects so ON so.name = si.name AND so.xtype = 'PK'
WHERE sc.id = a.id AND sc.colid = a.colid
) THEN '√' ELSE '' END AS 主鍵,
b.name AS 資料類型,
a.length AS 長度,
COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS 精度,
ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS 小數位數,
CASE WHEN a.isnullable = 1 THEN '√' ELSE '' END AS 允許空值,
ISNULL(e.text, '') AS 預設值,
ISNULL(g.[value], '') AS 欄位說明
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.status >= 0
LEFT JOIN syscomments e ON a.cdefault = e.id
LEFT JOIN sysproperties g ON a.id = g.id AND a.colid = g.smallid AND g.name = 'MS_Description'
ORDER BY a.id, a.colorder;
| 代碼 | 物件類型 |
|---|---|
| U | 使用者表 |
| P | 預存程序 |
| V | 視圖 |
| FN | 純量函數 |
| IF | 內嵌資料表值函數 |
| TF | 多陳述式資料表值函數 |
| TR | 觸發器 |
| PK | 主鍵約束 |
| F | 外鍵約束 |
| C | CHECK 約束 |
| D | DEFAULT 約束 |
INFORMATION_SCHEMA 檢視或 sys.* 目錄檢視(如 sys.tables, sys.columns)syscomments 在大型預存程序中可能被截斷,建議用 OBJECT_DEFINITION()熟練掌握 sysobjects、syscolumns、syscomments 三大核心系統表,配合 OBJECT_ID()、COLUMNPROPERTY() 等中繼資料函數,能快速完成結構查詢、相依性分析、程式碼搜尋等 DBA 與開發常見任務。