SQL查询所有表名详解

发布时间:2023-05-23

一、基础查询表名

在SQL Server中,我们可以用以下语句来查询所有表的名称:

SELECT name FROM sys.tables

该语句中,sys.tables是一个系统表,它存储了所有表的信息,包括表名称、表ID等。通过查询该表,我们可以获取所有表的名称。 这里需要注意的是,查询结果可能会包含一些系统表,例如sysdiagrams等,我们可以根据需求进行过滤。

二、查询特定模式下的表名

在某些情况下,我们可能只需要查询特定模式下的表名。例如在一个数据库中,可能有多个模式,我们希望只查询其中一个模式下的表名。 下面是查询特定模式下表名的语句:

SELECT name FROM sys.tables WHERE SCHEMA_NAME(schema_id) = '模式名称'

该语句中,SCHEMA_NAME(schema_id)函数用于获取模式名称,模式名称需要用单引号括起来。同时,我们也可以使用LIKE运算符对模式名称进行模糊匹配。

三、查询表名称和行数

有时候我们需要查询表的名称以及其中的行数,下面是查询表名称和行数的语句:

SELECT T.name AS TableName, P.rows AS RowCounts 
FROM sys.tables T 
INNER JOIN sys.partitions P ON T.object_id = P.object_id 
WHERE P.index_id IN (0,1)

该语句中,我们使用了INNER JOIN语句来关联sys.tables表和sys.partitions表,以获取表名称和行数信息。其中,0和1表示聚集索引和非聚集索引,我们可以根据实际情况进行调整。

四、查询表名称和大小

除了行数,我们还可以查询表的大小,下面是查询表名称和大小的语句:

SELECT T.Name AS TableName, 
SUM(P.reserved_page_count) * 8.0 / 1024 / 1024 AS TableSizeInMB
FROM sys.tables T
INNER JOIN sys.dm_db_partition_stats P ON T.object_id = P.object_id
GROUP BY T.Name

该语句中,我们使用了sys.dm_db_partition_stats表来获取表的大小信息。该表包含了表的分区统计信息,通过聚合计算,我们可以得到表的总大小。

五、查询表的列信息

除了表名、行数和大小,我们还可以查询表的列信息,下面是查询表的列信息的语句:

SELECT T.Name AS TableName, 
C.name AS ColumnName, 
TYPE_NAME(C.system_type_id) AS DataType, 
C.max_length, 
C.is_nullable
FROM sys.tables T
INNER JOIN sys.columns C ON T.object_id = C.object_id
ORDER BY T.name, C.column_id

该语句中,我们使用了sys.columns表来获取表的列信息。通过关联sys.tables表和sys.columns表,我们可以获取每个表的列信息,并且按照表名和列顺序进行排序。

六、查询表的索引信息

表的索引对查询效率有重要的影响,因此我们可以通过以下语句来查询表的索引信息:

SELECT T.Name AS TableName, 
I.name AS IndexName, 
AC.Name AS ColumnName, 
I.is_unique, 
I.is_primary_key
FROM sys.tables T
INNER JOIN sys.indexes I ON T.object_id = I.object_id
INNER JOIN sys.index_columns IC ON I.object_id = IC.object_id AND I.index_id = IC.index_id
INNER JOIN sys.all_columns AC ON T.object_id = AC.object_id AND IC.column_id = AC.column_id

该语句中,我们使用了sys.indexes表、sys.index_columns表和sys.all_columns表来获取表的索引信息。通过关联这几个表,我们可以获取每个表的索引信息,并且查询结果包含了索引名称、列名称、是否唯一等信息。