SQL Server 查询表结构与数据行数的 SQL 语句总结

学习笔记作者:admin日期:2025-09-18点击:11

摘要:本文介绍了如何使用 SQL Server 查询表结构(包括表名、字段名、字段类型和字段说明)以及查询每个表的数据行数。通过系统视图和扩展属性,可以高效获取数据库元信息,并提供示例代码及使用建议。

SQL Server 查询表结构与数据行数的 SQL 语句总结

1. 查询表结构信息(表名、字段名、字段类型、字段说明)

      在 SQL Server 中,可以通过 INFORMATION_SCHEMA.COLUMNSsys.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.tablessys.schemassys.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 表名,但性能较差,尤其对大表。

上一篇      下一篇