En SQL Server, puede usar sys.partition_range_values
vista de catálogo del sistema para averiguar los valores límite utilizados para una tabla particionada.
Sin embargo, necesitaría saber el function_id
de la función de partición antes de usar esa vista.
Pero, como siempre, puede ejecutar una combinación con otras tablas para obtener la información deseada.
sys.partition_range_values
Primero, veamos en qué columnas sys.partition_range_values
ver devoluciones.
SELECT * FROM sys.partition_range_values;
Resultado:
+---------------+---------------+----------------+---------+ | function_id | boundary_id | parameter_id | value | |---------------+---------------+----------------+---------| | 65542 | 1 | 1 | -1 | | 65542 | 2 | 1 | 100 | | 65542 | 3 | 1 | 10000 | +---------------+---------------+----------------+---------+
Afortunadamente para mí, solo tengo una tabla particionada en esta base de datos, por lo que no me bombardean con los resultados.
Como se mencionó, esta vista devuelve el function_id
, por lo que podemos usar eso para unir un montón de otras tablas, de modo que podamos devolver datos para una tabla específica.
En mi caso, esto es superfluo, ya que solo hay una tabla particionada, pero supongamos que tiene muchos índices y montones particionados, y solo quiere reducirlos.
Reducirlo a una tabla
Aquí hay un ejemplo de cómo devolver los rangos de límite para una tabla específica llamada Movies
.
SELECT
p.partition_number,
r.boundary_id,
r.value AS [Boundary Value]
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.partitions AS p
ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id and r.boundary_id = p.partition_number
WHERE i.type <= 1 AND t.name = 'Movies'
ORDER BY p.partition_number ASC;
Resultado:
+--------------------+---------------+------------------+ | partition_number | boundary_id | Boundary Value | |--------------------+---------------+------------------| | 1 | 1 | -1 | | 2 | 2 | 100 | | 3 | 3 | 10000 | | 4 | NULL | NULL | +--------------------+---------------+------------------+
Aquí está de nuevo, pero ampliamos la lista de selección para incluir otra información, como el nombre del índice, el nombre de la función de partición, etc.
SELECT
t.name AS [Table],
i.name AS [Index],
p.partition_number,
f.name,
r.boundary_id,
r.value AS [Boundary Value]
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.partitions AS p
ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id and r.boundary_id = p.partition_number
WHERE i.type <= 1 AND t.name = 'Movies'
ORDER BY p.partition_number ASC;
Resultado:
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+ | Table | Index | partition_number | name | boundary_id | Boundary Value | |---------+------------------------------+--------------------+-------------------------+---------------+------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | 1 | MoviesPartitionFunction | 1 | -1 | | Movies | PK__Movies__4BD2941AD44D2FCF | 2 | MoviesPartitionFunction | 2 | 100 | | Movies | PK__Movies__4BD2941AD44D2FCF | 3 | MoviesPartitionFunction | 3 | 10000 | | Movies | PK__Movies__4BD2941AD44D2FCF | 4 | MoviesPartitionFunction | NULL | NULL | +---------+------------------------------+--------------------+-------------------------+---------------+------------------+
Aquí está ese resultado nuevamente usando la salida vertical (para que no tengas que desplazarte hacia los lados):
-[ RECORD 1 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 1 name | MoviesPartitionFunction boundary_id | 1 Boundary Value | -1 -[ RECORD 2 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 2 name | MoviesPartitionFunction boundary_id | 2 Boundary Value | 100 -[ RECORD 3 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 3 name | MoviesPartitionFunction boundary_id | 3 Boundary Value | 10000 -[ RECORD 4 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 4 name | MoviesPartitionFunction boundary_id | NULL Boundary Value | NULL