¿Cómo obtengo una lista de todas las tablas particionadas en mi base de datos?
¿Qué tablas del sistema / DMV debo mirar?
¿Cómo obtengo una lista de todas las tablas particionadas en mi base de datos?
¿Qué tablas del sistema / DMV debo mirar?
Respuestas:
Esta consulta debería darte lo que quieres:
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 de catálogo proporciona una lista de todas las particiones para tablas y la mayoría de los índices. Solo únete a eso sys.tables
para obtener las mesas.
Todas las tablas tienen al menos una partición, por lo que si está buscando específicamente tablas particionadas, tendrá que filtrar esta consulta en función de sys.partitions.partition_number <> 1
(para tablas no particionadas, partition_number
siempre es igual a 1).
partition_id
en su cláusula WHERE que necesita partition_number
. Mis disculpas.
Creo que una mejor consulta es la siguiente:
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
Esto busca el lugar 'adecuado' para identificar el esquema de partición: sys.partition_schemes
tiene la cardinalidad correcta (no es necesario distinct
), muestra solo el objeto particionado (no es necesario una where
cláusula de filtrado ), proyecta el nombre del esquema y el nombre del esquema de partición. Observe también cómo esta consulta resalta una falla en la pregunta original: no son las tablas las que están particionadas, sino los índices (y esto incluye el índice 0 y 1, también conocido como montón e índice agrupado). Una tabla puede tener múltiples índices, algunos particionados y otros no.
Bueno, entonces ¿qué tal combinar los 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