SQL Server 查询表结构与数据行数的 SQL 语句总结
学习笔记作者:admin日期:2025-09-18点击:120
摘要:本文介绍了如何使用 SQL Server 查询表结构(包括表名、字段名、字段类型和字段说明)以及查询每个表的数据行数。通过系统视图和扩展属性,可以高效获取数据库元信息,并提供示例代码及使用建议。
SQL Server 查询表结构与数据行数的 SQL 语句总结
1. 查询表结构信息(表名、字段名、字段类型、字段说明)
      在 SQL Server 中,可以通过 INFORMATION_SCHEMA.COLUMNS 和 sys.extended_properties 系统视图来获取表结构信息,包括表名、字段名、字段类型和字段说明。
SELECT 
    t.TABLE_NAME AS 表名,
    c.COLUMN_NAME AS 字段名,
    CASE 
        WHEN c.DATA_TYPE IN ('varchar', 'char', 'nvarchar', 'nchar') 
        THEN c.DATA_TYPE + '(' + 
             CASE WHEN c.CHARACTER_MAXIMUM_LENGTH = -1 THEN 'MAX'
                  ELSE CAST(c.CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10)) 
             END + ')' 
        WHEN c.DATA_TYPE IN ('decimal', 'numeric')
        THEN c.DATA_TYPE + '(' + CAST(c.NUMERIC_PRECISION AS VARCHAR(3)) + ',' + CAST(c.NUMERIC_SCALE AS VARCHAR(3)) + ')'
        ELSE c.DATA_TYPE 
    END AS 字段类型,
    ISNULL(ep.value, '') AS 字段说明
FROM 
    INFORMATION_SCHEMA.TABLES t
    INNER JOIN INFORMATION_SCHEMA.COLUMNS c 
        ON t.TABLE_NAME = c.TABLE_NAME 
       AND t.TABLE_SCHEMA = c.TABLE_SCHEMA
    LEFT JOIN sys.extended_properties ep 
        ON OBJECT_ID(t.TABLE_SCHEMA + '.' + t.TABLE_NAME) = ep.major_id
       AND c.ORDINAL_POSITION = ep.minor_id
       AND ep.name = 'MS_Description'
       AND ep.class = 1  -- 1 表示是列级别的扩展属性
WHERE 
    t.TABLE_TYPE = 'BASE TABLE'
    AND t.TABLE_SCHEMA = 'dbo'  -- 可根据需要修改 Schema,如 'dbo'
ORDER BY 
    t.TABLE_NAME, 
    c.ORDINAL_POSITION;2. 查询表的数据行数
      若要查询每个表的名称及其对应的数据行数(即表中的记录总数),可以使用 sys.tables、sys.schemas 和 sys.partitions 系统视图。
SELECT 
    t.NAME AS 表名,
    SUM(p.rows) AS 数据行数
FROM 
    sys.tables t
    INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
    INNER JOIN sys.partitions p ON t.object_id = p.object_id
WHERE 
    p.index_id IN (0, 1) -- 0 = 堆表, 1 = 聚集索引,每个表只计一次数据行
    AND s.name = 'dbo'   -- 可根据需要修改 Schema,如 'dbo'
    AND t.is_ms_shipped = 0 -- 排除系统自带的表
GROUP BY 
    t.NAME
ORDER BY 
    数据行数 DESC;3. 使用建议
- 如果只想查某个表,可以在 WHERE后加:AND t.TABLE_NAME = 'YourTableName'
- 如果表不在 dbo模式下,请修改t.TABLE_SCHEMA = 'dbo'为对应的 Schema 名称。
- 确保数据库中已为列添加了描述(通过 sp_addextendedproperty添加),否则“字段说明”为空。
4. 示例添加字段说明
EXEC sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'用户姓名', 
    @level0type = N'SCHEMA', @level0name = 'dbo',
    @level1type = N'TABLE',  @level1name = 'Users',
    @level2type = N'COLUMN', @level2name = 'UserName';5. 注意事项
- 此方法返回的是近似行数(由 SQL Server 统计信息维护),在大多数情况下是准确的,但若刚发生大量增删操作,可能略有延迟。
- 如果需要绝对精确SELECT COUNT(*) FROM 表名,但性能较差,尤其对大表。