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

三大 SQL 查詢快速產出 SQL Server 完整資料字典

     編輯:關於SqlServer

在資料庫開發與維護中,掌握完整的資料字典至關重要。本文提供三組實用的 SQL 查詢語句,涵蓋 SQL Server 2000 與 2005 版本,能一次查出資料表結構、索引、主鍵、外鍵、約束、視圖、函數、預存程序與觸發器等核心物件資訊。無論是在查詢分析器還是企業管理器中執行,都能快速產出完整的資料庫文件,大幅減少人工整理的時間成本。

一、SQL Server 2000 / 2005 資料表結構查詢

以下查詢適用於 SQL Server 2000 與 2005(語法相同),可輸出資料表名稱、說明、欄位序號、欄位名稱、是否為識別欄位、主鍵標記、資料類型、長度、精度、小數位數、是否允許 Null、預設值、欄位說明、建立時間與修改時間:

SELECT TOP 100 PERCENT
    CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,
    CASE WHEN a.colorder = 1 THEN ISNULL(f.value, '') 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 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 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 字段說明,
    d.crdate AS 創建時間,
    CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END AS 更改時間
FROM dbo.syscolumns a
LEFT OUTER 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 OUTER JOIN dbo.syscomments e ON a.cdefault = e.id
LEFT OUTER JOIN dbo.sysproperties g ON a.id = g.id AND a.colid = g.smallid AND g.name = 'MS_Description'
LEFT OUTER JOIN dbo.sysproperties f ON d.id = f.id AND f.smallid = 0 AND f.name = 'MS_Description'
ORDER BY d.name, a.colorder;

二、索引與鍵值資訊查詢

此查詢可列出所有使用者資料表的索引名稱、欄位、排序方式、是否為主鍵、叢集索引、唯一索引、唯一約束、填充因子、建立與修改時間:

SELECT TOP 100 PERCENT
    CASE WHEN b.keyno = 1 THEN c.name ELSE '' END AS 表名,
    CASE WHEN b.keyno = 1 THEN a.name ELSE '' END AS 索引名稱,
    d.name AS 列名,
    b.keyno AS 索引順序,
    CASE indexkey_property(c.id, b.indid, b.keyno, 'isdescending')
        WHEN 1 THEN '降序' WHEN 0 THEN '升序' END AS 排序,
    CASE WHEN p.id IS NULL THEN '' ELSE '√' END AS 主鍵,
    CASE INDEXPROPERTY(c.id, a.name, 'IsClustered')
        WHEN 1 THEN '√' WHEN 0 THEN '' END AS 聚集,
    CASE INDEXPROPERTY(c.id, a.name, 'IsUnique')
        WHEN 1 THEN '√' WHEN 0 THEN '' END AS 唯一,
    CASE WHEN e.id IS NULL THEN '' ELSE '√' END AS 唯一約束,
    a.OrigFillFactor AS 填充因子,
    c.crdate AS 創建時間,
    c.refdate AS 更改時間
FROM dbo.sysindexes a
INNER JOIN dbo.sysindexkeys b ON a.id = b.id AND a.indid = b.indid
INNER JOIN dbo.syscolumns d ON b.id = d.id AND b.colid = d.colid
INNER JOIN dbo.sysobjects c ON a.id = c.id AND c.xtype = 'U'
LEFT OUTER JOIN dbo.sysobjects e ON e.name = a.name AND e.xtype = 'UQ'
LEFT OUTER JOIN dbo.sysobjects p ON p.name = a.name AND p.xtype = 'PK'
WHERE OBJECTPROPERTY(a.id, N'IsUserTable') = 1
  AND OBJECTPROPERTY(a.id, N'IsMSShipped') = 0
  AND INDEXPROPERTY(a.id, a.name, 'IsAutoStatistics') = 0
ORDER BY c.name, a.name, b.keyno;

三、主鍵、外鍵、約束、視圖、函數、預存程序、觸發器綜合查詢

單一查詢即可取得所有關鍵資料庫物件的類型、名稱、建立時間、修改時間與宣告語句:

SELECT DISTINCT
    TOP 100 PERCENT o.xtype,
    CASE o.xtype
        WHEN 'X' THEN '擴展存儲過程'
        WHEN 'TR' THEN '觸發器'
        WHEN 'PK' THEN '主鍵'
        WHEN 'F' THEN '外鍵'
        WHEN 'C' THEN '約束'
        WHEN 'V' THEN '視圖'
        WHEN 'FN' THEN '函數-標量'
        WHEN 'IF' THEN '函數-內嵌'
        WHEN 'TF' THEN '函數-表值'
        ELSE '存儲過程'
    END AS 類型,
    o.name AS 對象名,
    o.crdate AS 創建時間,
    o.refdate AS 更改時間,
    c.text AS 聲明語句
FROM dbo.sysobjects o
LEFT OUTER JOIN dbo.syscomments c ON o.id = c.id
WHERE o.xtype IN ('X', 'TR', 'C', 'V', 'F', 'IF', 'TF', 'FN', 'P', 'PK')
  AND OBJECTPROPERTY(o.id, N'IsMSShipped') = 0
ORDER BY CASE o.xtype
    WHEN 'X' THEN '擴展存儲過程'
    WHEN 'TR' THEN '觸發器'
    WHEN 'PK' THEN '主鍵'
    WHEN 'F' THEN '外鍵'
    WHEN 'C' THEN '約束'
    WHEN 'V' THEN '視圖'
    WHEN 'FN' THEN '函數-標量'
    WHEN 'IF' THEN '函數-內嵌'
    WHEN 'TF' THEN '函數-表值'
    ELSE '存儲過程' END DESC;

使用建議:將上述三組查詢儲存為 .sql 檔案,專案交接或資料庫審計時直接執行,即可獲得標準化的資料字典文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved