在 SQL Server 中,可以通过查询系统视图 sys.tables
来读取数据库中的所有表。这将列出数据库中所有用户定义的表。以下是如何获取所有表名以及其他相关信息的几种方法。
1. 使用 sys.tables
sys.tables
视图包含了数据库中所有用户定义的表的信息。
查询数据库中所有表的名称
SELECT
name AS TableName
FROM
sys.tables
ORDER BY
name;
name
: 表的名称。ORDER BY name
: 按表名称排序。
查询所有表的名称及其创建日期
如果您还想查看表的创建日期,可以将 sys.tables
与 sys.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 数据库中所有表的各种信息,包括表名、创建日期、模式、行数等。这些信息对于数据库管理、审计和优化都非常有用。根据您的具体需求,可以选择合适的查询方法。