如何获取数据库中所有分区表的列表?

RK *_*ala 27 sql-server-2008 sql-server metadata partitioning

如何获取数据库中所有分区表的列表?

我应该查看哪些系统表/DMV?

Rem*_*anu 31

我认为更好的查询如下:

select object_schema_name(i.object_id) as [schema],
    object_name(i.object_id) as [object],
    i.name as [index],
    s.name as [partition_scheme]
    from sys.indexes i
    join sys.partition_schemes s on i.data_space_id = s.data_space_id
Run Code Online (Sandbox Code Playgroud)

这会查看识别分区方案的“正确”位置:sys.partition_schemes,它具有正确的基数(不需要distinct),它显示分区对象(不需要过滤where子句),它投影模式名称和分区方案名称。还要注意这个查询如何突出原始问题的一个缺陷:分区的不是,而是索引(这包括索引 0 和 1,也就是堆和聚集索引)。一个表可以有多个索引,有些已分区,有些未分区。

  • 这是正确的答案而不是第一个 - 考虑到表是否为 ON 分区方案而不是文件组 (3认同)

Tho*_*ger 24

这个查询应该给你你想要的:

select distinct t.name
from sys.partitions p
inner join sys.tables t
on p.object_id = t.object_id
where p.partition_number <> 1
Run Code Online (Sandbox Code Playgroud)

sys.partitions目录视图为表和索引的大多数所有分区的列表。只需加入sys.tables即可获得表格。

所有表都至少有一个分区,因此如果您专门查找分区表,那么您必须根据sys.partitions.partition_number <> 1(对于非分区表,partition_number始终等于 1)过滤此查询。

  • 这里有一个错误 - 表仍然可以分区(使用 PF 和 PS)但具有单个分区。所以对于那些表,查询返回错误的结果 (4认同)