답변:
이 쿼리는 원하는 것을 제공해야합니다.
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
. 사과드립니다.
Methinks가 더 나은 쿼리는 다음과 같습니다.
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
표시 하고 (필터링 절 필요 없음 ) 스키마 이름과 파티션 구성표 이름을 투사합니다. 이 쿼리가 원래 질문에 대한 결함을 강조하는 방법에 주목하십시오. 파티션 된 테이블 이 아니라 인덱스입니다 (인덱스 0과 1, 일명 힙 및 클러스터형 인덱스 포함). 테이블에는 여러 개의 인덱스가있을 수 있으며, 일부는 분할되지 않은 인덱스가있을 수 있습니다.where
그렇다면 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