it-swarm.asia

Bagaimana cara saya mendapatkan daftar semua tabel dipartisi di database saya?

Bagaimana cara saya mendapatkan daftar semua tabel dipartisi di database saya?

Tabel sistem/DMV mana yang harus saya lihat?

24
RK Kuppala

Kueri ini akan memberi Anda apa yang Anda inginkan:

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 tampilan katalog memberikan daftar semua partisi untuk tabel dan sebagian besar indeks. GABUNG saja dengan sys.tables untuk mendapatkan tabel.

Semua tabel memiliki setidaknya satu partisi, jadi jika Anda mencari tabel yang dipartisi, maka Anda harus memfilter kueri ini berdasarkan sys.partitions.partition_number <> 1 (untuk tabel yang tidak dipartisi, partition_number selalu sama dengan 1).

22
Thomas Stringer

Memikirkan permintaan yang lebih baik adalah sebagai berikut:

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

Ini terlihat di tempat yang 'tepat' untuk mengidentifikasi skema partisi: sys.partition_schemes , ia memiliki kardinalitas yang tepat (tidak perlu distinct), ini menunjukkan hanya objek yang dipartisi (tidak perlu untuk a filtering where klausa), memproyeksikan nama skema dan nama skema partisi. Perhatikan juga bagaimana kueri ini menyoroti cacat pada pertanyaan asli: bukan tabel yang dipartisi, tetapi indeks (dan ini termasuk indeks 0 dan 1, alias. heap dan indeks berkerumun). Sebuah tabel dapat memiliki beberapa indeks, beberapa yang dipartisi tidak.

29
Remus Rusanu

Nah, kalau begitu bagaimana menggabungkan 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    
3
guest