首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005/2008 表結構完整查詢腳本 (含外鍵資訊)

     編輯:SQL Server 2005

一條可直接執行的 T-SQL 查詢,完整輸出指定資料表的欄位定義、主鍵、外鍵關聯、擴充屬性 (說明)、預設值、建立/修改時間等中繼資料,適用於資料字典產生、文件化與異動比對。

查詢腳本

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 dbo.sysindexes si
                        INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid
                        INNER JOIN dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid
                        INNER JOIN dbo.sysobjects so ON so.name = si.name AND so.xtype = 'PK'
                        WHERE sc.id = a.id AND sc.colid = a.colid
                    ) THEN '√' ELSE '' END,
    外鍵       = CASE WHEN fk.fkey IS NOT NULL AND fk.fkey = a.colid THEN '√' ELSE '' END,
    外鍵表     = CASE WHEN fk.fkey IS NOT NULL AND fk.fkey = a.colid THEN OBJECT_NAME(fk.fkeyid) ELSE '' END,
    外鍵欄位   = CASE WHEN fk.fkey IS NOT NULL AND fk.fkey = a.colid
                        THEN (SELECT name FROM syscolumns WHERE colid = fk.fkey AND id = fk.fkeyid)
                        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], ''),
    建立時間   = d.crdate,
    修改時間   = CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END
FROM dbo.syscolumns a
LEFT JOIN dbo.systypes b ON a.xtype = b.xusertype
INNER JOIN dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.status >= 0
LEFT JOIN dbo.syscomments e ON a.cdefault = e.id
LEFT JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id
LEFT JOIN sys.extended_properties f ON d.id = f.major_id AND f.minor_id = 0
LEFT JOIN sysobjects fk_obj ON fk_obj.parent_obj = d.id AND fk_obj.xtype = 'F'
LEFT JOIN sysforeignkeys fk ON fk_obj.id = fk.constid
WHERE d.name = 'YourTableName'  -- 修改為目標表名
ORDER BY d.id, a.colorder;

欄位說明

輸出欄位來源/邏輯
表名/表說明僅首列顯示,取自 sysobjects 與擴充屬性 MS_Description
標識COLUMNPROPERTY(..., 'IsIdentity')
主鍵關聯 sysindexes/sysindexkeys/sysobjects(xtype='PK') 判斷
外鍵/外鍵表/外鍵欄位關聯 sysforeignkeys 透過約束物件取得參考表與欄位
類型/長度/精度/小數位systypes 與 COLUMNPROPERTY
預設值syscomments 文字
字段說明欄位層級擴充屬性 MS_Description

使用建議

  • 將 WHERE d.name = '...' 改為 LIKE 或移除以查詢多張表。
  • 搭配 sp_addextendedproperty 維護說明,打造完整資料字典。
  • SQL Server 2008+ 建議改用 INFORMATION_SCHEMA.COLUMNS 與 sys.foreign_keys 等標準檢視,相容性更好。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved