Jak uzyskać listę wszystkich tabel partycjonowanych w mojej bazie danych?
Na jakie tabele systemowe / DMV powinienem patrzeć?
Jak uzyskać listę wszystkich tabel partycjonowanych w mojej bazie danych?
Na jakie tabele systemowe / DMV powinienem patrzeć?
Odpowiedzi:
To zapytanie powinno dać ci to, czego chcesz:
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
Widok Katalog zawiera listę wszystkich partycji na stoły i większości indeksów. Po prostu DOŁĄCZ, sys.tables
aby uzyskać tabele.
Wszystkie tabele mają co najmniej jedną partycję, więc jeśli szukasz specjalnie tabel podzielonych na partycje, musisz odfiltrować to zapytanie na podstawie sys.partitions.partition_number <> 1
(dla tabel niepartycjonowanych wartość ta partition_number
jest zawsze równa 1).
partition_id
w klauzuli WHERE potrzebujesz partition_number
. Przepraszam.
Uważa, że lepsze zapytanie jest następujące:
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
Spogląda na „właściwe” miejsce do identyfikacji schematu partycji: sys.partition_schemes
ma odpowiednią liczność (nie ma potrzeby distinct
), pokazuje tylko partycjonowany obiekt (nie wymaga where
klauzuli filtrującej ), wyświetla nazwę schematu i nazwę schematu partycji. Zwróć też uwagę, jak to zapytanie uwypukla lukę w pierwotnym pytaniu: to nie tabele są podzielone na partycje, ale indeksy (i obejmuje to indeks 0 i 1, czyli kupa i indeks klastrowany). Tabela może mieć wiele indeksów, niektóre nie podzielone na partycje.
A co powiesz na połączenie 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