Bagaimana cara saya mendapatkan daftar semua tabel dipartisi di database saya?
Tabel sistem / DMV mana yang harus saya lihat?
Bagaimana cara saya mendapatkan daftar semua tabel dipartisi di database saya?
Tabel sistem / DMV mana yang harus saya lihat?
Jawaban:
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
Tampilan sys.partitions
katalog memberikan daftar semua partisi untuk tabel dan sebagian besar indeks. GABUNG saja dengan sys.tables
mendapatkan tabel.
Semua tabel memiliki setidaknya satu partisi, jadi jika Anda mencari secara khusus untuk tabel yang dipartisi, maka Anda harus memfilter kueri ini berdasarkan dari sys.partitions.partition_number <> 1
(untuk tabel yang tidak dipartisi, partition_number
selalu sama dengan 1).
partition_id
dalam klausa WHERE Anda yang Anda butuhkan partition_number
. Permintaan maaf saya.
Memikirkan kueri 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 untuk distinct
), ini menunjukkan hanya objek yang dipartisi (tidak perlu untuk where
klausa penyaringan ), ia memproyeksikan nama skema dan nama skema partisi. Perhatikan juga bagaimana kueri ini menyoroti cacat pada pertanyaan asli: ini 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.
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