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

SQL Server 獲取資料庫、資料表、欄位名稱的系統目錄查詢速查表

     編輯:關於SqlServer

核心系統目錄視圖 (SQL Server 2005+ 推薦)

舊版 sysobjects、syscolumns 已棄用,現代版本請使用標準目錄視圖:

1. 列出所有使用者資料庫

SELECT name, database_id, create_date, state_desc
FROM sys.databases
WHERE database_id > 4  -- 排除 system databases (master, tempdb, model, msdb)
  AND state_desc = 'ONLINE'
ORDER BY name;

2. 列出目前資料庫所有使用者資料表

SELECT 
    t.name AS TableName,
    s.name AS SchemaName,
    t.create_date,
    t.modify_date,
    p.rows AS RowCount
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
LEFT JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0,1)
WHERE t.is_ms_shipped = 0
ORDER BY s.name, t.name;

3. 列出指定資料表所有欄位詳細資訊

SELECT 
    c.name AS ColumnName,
    ty.name AS DataType,
    c.max_length,
    c.precision,
    c.scale,
    c.is_nullable,
    c.is_identity,
    c.default_object_id,
    OBJECT_DEFINITION(c.default_object_id) AS DefaultValue,
    ep.value AS Description
FROM sys.columns c
INNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id
LEFT JOIN sys.extended_properties ep 
    ON ep.major_id = c.object_id 
   AND ep.minor_id = c.column_id
   AND ep.name = 'MS_Description'
WHERE c.object_id = OBJECT_ID('dbo.YourTableName')
ORDER BY c.column_id;

相容性查詢 (SQL Server 2000 / 7.0 僅支援)

⚠ 僅限舊版本維護使用:新專案請勿使用 sysobjects、syscolumns、systypes 等舊系統表,它們在未來版本可能移除且效能較差。

1. 所有資料庫名稱

SELECT name FROM master.dbo.sysdatabases;

2. 所有使用者資料表

SELECT name 
FROM sysobjects 
WHERE xtype = 'U'  -- U = User Table
ORDER BY name;

3. 指定資料表所有欄位名稱

SELECT name 
FROM syscolumns 
WHERE id = OBJECT_ID('YourTableName')
ORDER BY colid;

進階:一次查詢所有表的所有欄位 (含結構描述)

SELECT 
    DB_NAME() AS DatabaseName,
    s.name AS SchemaName,
    t.name AS TableName,
    c.name AS ColumnName,
    ty.name AS DataType,
    CASE 
        WHEN ty.name IN ('varchar','nvarchar','char','nchar') THEN c.max_length / CASE WHEN ty.name LIKE 'n%' THEN 2 ELSE 1 END
        WHEN ty.name IN ('decimal','numeric') THEN c.precision
        ELSE c.max_length
    END AS LengthOrPrecision,
    c.scale,
    c.is_nullable,
    c.is_identity,
    ISNULL(ep.value, '') AS ColumnDescription
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN sys.columns c ON t.object_id = c.object_id
INNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id
LEFT JOIN sys.extended_properties ep 
    ON ep.major_id = c.object_id 
   AND ep.minor_id = c.column_id
   AND ep.class = 1
   AND ep.name = 'MS_Description'
WHERE t.is_ms_shipped = 0
ORDER BY s.name, t.name, c.column_id;

實用腳本:產生資料字典 Excel 匯出

-- 直接在 SSMS 結果格設為「網格」→ 右鍵另存為 .csv → Excel 開啟
SELECT 
    'Database' = DB_NAME(),
    'Schema' = s.name,
    'Table' = t.name,
    'Column' = c.name,
    'Type' = ty.name + 
        CASE WHEN ty.name IN ('varchar','nvarchar','char','nchar','varbinary','binary') 
             THEN '(' + CAST(CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length / CASE WHEN ty.name LIKE 'n%' THEN 2 ELSE 1 END AS VARCHAR) END) + ')'
             WHEN ty.name IN ('decimal','numeric') 
             THEN '(' + CAST(c.precision AS VARCHAR) + ',' + CAST(c.scale AS VARCHAR) + ')'
             ELSE ''
        END,
    'Nullable' = CASE c.is_nullable WHEN 1 THEN 'YES' ELSE 'NO' END,
    'Identity' = CASE c.is_identity WHEN 1 THEN 'YES' ELSE 'NO' END,
    'Default' = ISNULL(OBJECT_DEFINITION(c.default_object_id), ''),
    'Description' = ISNULL(ep.value, '')
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN sys.columns c ON t.object_id = c.object_id
INNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id
LEFT JOIN sys.extended_properties ep 
    ON ep.major_id = c.object_id 
   AND ep.minor_id = c.column_id
   AND ep.class = 1
   AND ep.name = 'MS_Description'
WHERE t.is_ms_shipped = 0
ORDER BY s.name, t.name, c.column_id;

總結對照表

需求現代寫法 (2005+)舊版寫法 (2000/7.0)備註
所有資料庫sys.databasesmaster.dbo.sysdatabases現代版可篩選 state, owner
所有使用者表sys.tables (is_ms_shipped=0)sysobjects (xtype='U')現代版含 schema, create_date
所有系統表sys.tables (is_ms_shipped=1)sysobjects (xtype='S')
表的所有欄位sys.columns + sys.typessyscolumns + systypes現代版含精度、標識、預設、擴展屬性
欄位描述sys.extended_properties (MS_Description)不支援SSMS 右鍵「屬性」→「描述」即寫入此處

掌握現代目錄視圖查詢,不僅相容未來版本,更能取得豐富的結構描述中繼資料,是資料庫文件化、自動化部署、程式碼產生器的基石。

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