一、基础查询表名
在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
表来获取表的索引信息。通过关联这几个表,我们可以获取每个表的索引信息,并且查询结果包含了索引名称、列名称、是否唯一等信息。