在 SQL Server 中,可以通过查询系统视图 sys.tables 来读取数据库中的所有表。这将列出数据库中所有用户定义的表。以下是如何获取所有表名以及其他相关信息的几种方法。

1. 使用 sys.tables

sys.tables 视图包含了数据库中所有用户定义的表的信息。

查询数据库中所有表的名称
SELECT 
    name AS TableName
FROM 
    sys.tables
ORDER BY 
    name;
  • name: 表的名称。
  • ORDER BY name: 按表名称排序。
查询所有表的名称及其创建日期

如果您还想查看表的创建日期,可以将 sys.tablessys.objects 视图结合起来使用:

SELECT 
    t.name AS TableName,
    o.create_date AS CreationDate
FROM 
    sys.tables AS t
INNER JOIN 
    sys.objects AS o ON t.object_id = o.object_id
ORDER BY 
    t.name;
  • create_date: 表的创建日期。

2. 使用 INFORMATION_SCHEMA.TABLES

INFORMATION_SCHEMA.TABLES 视图是另一种查询所有表的方式。这种方式与 SQL 标准兼容,在不同数据库管理系统之间更具可移植性。

查询数据库中所有表的名称
SELECT 
    TABLE_NAME
FROM 
    INFORMATION_SCHEMA.TABLES
WHERE 
    TABLE_TYPE = 'BASE TABLE'
ORDER BY 
    TABLE_NAME;
  • TABLE_NAME: 表的名称。
  • TABLE_TYPE: 限制查询结果仅包括基本表(BASE TABLE),排除视图(VIEW)。

3. 查询数据库中所有表及其模式

如果您需要同时查看表所属的模式(Schema),可以使用以下查询:

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME
FROM 
    INFORMATION_SCHEMA.TABLES
WHERE 
    TABLE_TYPE = 'BASE TABLE'
ORDER BY 
    TABLE_SCHEMA, TABLE_NAME;
  • TABLE_SCHEMA: 表所属的模式(Schema)名称。
  • TABLE_NAME: 表的名称。

4. 查询数据库中所有表及其行数

如果您想知道每个表中包含的行数,可以使用以下查询:

SELECT 
    t.name AS TableName,
    p.rows AS RowCounts
FROM 
    sys.tables AS t
INNER JOIN 
    sys.partitions AS p ON t.object_id = p.object_id
WHERE 
    p.index_id IN (0, 1)
GROUP BY 
    t.name, p.rows
ORDER BY 
    RowCounts DESC;
  • RowCounts: 每个表中的行数。
  • index_id IN (0, 1): 过滤聚集索引和堆的数据行数。

小结

通过这些查询,您可以获取 SQL Server 数据库中所有表的各种信息,包括表名、创建日期、模式、行数等。这些信息对于数据库管理、审计和优化都非常有用。根据您的具体需求,可以选择合适的查询方法。