В SQL Server можете да използвате sys.partition_range_values
изглед на системния каталог, за да разберете граничните стойности, използвани за разделена таблица.
Все пак ще трябва да знаете function_id
на функцията за разделяне, преди да използвате този изглед.
Но както винаги, можете да изпълните обединяване срещу куп други таблици, за да получите желаната информация.
sys.partition_range_values
Първо, нека видим какви колони са sys.partition_range_values
изглед се връща.
SELECT * FROM sys.partition_range_values;
Резултат:
+---------------+---------------+----------------+---------+ | function_id | boundary_id | parameter_id | value | |---------------+---------------+----------------+---------| | 65542 | 1 | 1 | -1 | | 65542 | 2 | 1 | 100 | | 65542 | 3 | 1 | 10000 | +---------------+---------------+----------------+---------+
За мое щастие, имам само една разделена таблица в тази база данни, така че не съм бомбардиран с резултати.
Както споменахме, този изглед връща function_id
, така че можем да го използваме, за да се присъединим към куп други таблици, така че да можем да върнем данни за конкретна таблица.
В моя случай това е излишно, тъй като има само една разделена таблица, но да приемем, че имате много разделени купища и индекси и просто искате да я стесните.
Стеснете го до таблица
Ето пример за връщане на граничните диапазони за конкретна таблица, наречена 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;
Резултат:
+--------------------+---------------+------------------+ | partition_number | boundary_id | Boundary Value | |--------------------+---------------+------------------| | 1 | 1 | -1 | | 2 | 2 | 100 | | 3 | 3 | 10000 | | 4 | NULL | NULL | +--------------------+---------------+------------------+
Ето го отново, но ние разширяваме списъка за избор, за да включим друга информация, като името на индекса, името на функцията за дял и т.н.
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;
Резултат:
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+ | 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 | +---------+------------------------------+--------------------+-------------------------+---------------+------------------+
Ето този резултат отново с помощта на вертикален изход (така че не е нужно да превъртате настрани):
-[ 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