Answers:
该查询应该给您您想要的:
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
该sys.partitions
目录视图为表和索引的大多数所有分区的列表。只需加入sys.tables
即可获得表格。
所有表都有至少一个分区,因此,如果您要专门查找分区表,则必须基于过滤此查询sys.partitions.partition_number <> 1
(对于非分区表,该partition_number
值始终等于1)。
partition_id
在WHERE子句中,你需要partition_number
。我很抱歉。
方法认为更好的查询如下:
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
这将在“合适的”位置识别分区方案:sys.partition_schemes
,它具有正确的基数(不需要distinct
),仅显示分区的对象(不需要过滤where
子句),它投影了架构名称和分区方案名称。还请注意,此查询如何突出显示原始问题的一个缺陷:不是分区表而是索引(包括索引0和1,也就是堆和聚集索引)。一个表可以有多个索引,有些分区没有索引。
好吧,那么结合2:
select
object_schema_name(i.object_id) as [schema],
object_name(i.object_id) as [object_name],
t.name as [table_name],
i.name as [index_name],
s.name as [partition_scheme]
from sys.indexes i
join sys.partition_schemes s on i.data_space_id = s.data_space_id
join sys.tables t on i.object_id = t.object_id