Come posso ottenere un elenco di tutte le tabelle partizionate nel mio database?
Quali tabelle di sistema / DMV dovrei guardare?
Come posso ottenere un elenco di tutte le tabelle partizionate nel mio database?
Quali tabelle di sistema / DMV dovrei guardare?
Risposte:
Questa query dovrebbe darti quello che vuoi:
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
vista del catalogo fornisce un elenco di tutte le partizioni per le tabelle e la maggior parte degli indici. Unisciti a quello con sys.tables
per ottenere i tavoli.
Tutte le tabelle hanno almeno una partizione, quindi se stai cercando specificamente tabelle partizionate, dovrai filtrare questa query in base a sys.partitions.partition_number <> 1
(per le tabelle non partizionate, partition_number
è sempre uguale a 1).
partition_id
nella clausola WHERE di cui hai bisogno partition_number
. Mie scuse.
Pensa che una query migliore sia la seguente:
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
Questo esamina il posto "corretto" per identificare lo schema di partizione: sys.partition_schemes
ha la giusta cardinalità (non è necessario distinct
), mostra solo oggetti partizionati (non è necessaria una where
clausola di filtro ), proietta il nome dello schema e il nome dello schema di partizione. Nota anche come questa query evidenzi un difetto sulla domanda originale: non sono le tabelle che sono partizionate, ma gli indici (e questo include gli indici 0 e 1, alias. Heap e indice cluster). Una tabella può avere più indici, alcuni partizionati altri no.
Bene, allora che ne dici di combinare il 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