Comment obtenir une liste de toutes les tables partitionnées dans ma base de données?
Quelles tables système / DMV dois-je consulter?
Comment obtenir une liste de toutes les tables partitionnées dans ma base de données?
Quelles tables système / DMV dois-je consulter?
Réponses:
Cette requête devrait vous donner ce que vous voulez:
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
La sys.partitions
vue catalogue donne une liste de toutes les partitions pour les tables et la plupart des index. JOIGNEZ simplement cela avec sys.tables
pour obtenir les tableaux.
Toutes les tables ont au moins une partition, donc si vous recherchez spécifiquement des tables partitionnées, vous devrez filtrer cette requête en fonction de sys.partitions.partition_number <> 1
(pour les tables non partitionnées, le partition_number
est toujours égal à 1).
partition_id
dans votre clause WHERE, vous avez besoin partition_number
. Mes excuses.
Il me semble qu'une meilleure requête est la suivante:
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
Cela examine l'emplacement `` approprié '' pour identifier le schéma de partition: sys.partition_schemes
il a la bonne cardinalité (pas besoin de distinct
), il n'affiche que les objets partitionnés (pas besoin de where
clause de filtrage ), il projette le nom du schéma et le nom du schéma de partition. Notez également comment cette requête met en évidence une faille sur la question d'origine: ce ne sont pas les tables qui sont partitionnées, mais les index (et cela inclut les index 0 et 1, alias. Heap et index clusterisé). Une table peut avoir plusieurs index, certains non partitionnés.
Eh bien, que diriez-vous de combiner les 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