I SQL Server kan du bruge sys.partition_range_values
systemkatalogvisning for at finde ud af de grænseværdier, der bruges til en opdelt tabel.
Du skal dog kende function_id
af partitionsfunktionen, før du bruger denne visning.
Men som altid kan du køre en join mod en masse andre borde for at få den ønskede information.
sys.partition_range_values
Lad os først se, hvilke kolonner sys.partition_range_values
se afkast.
SELECT * FROM sys.partition_range_values;
Resultat:
+---------------+------------------- --+---------+| funktions-id | grænse_id | parameter_id | værdi ||----------------+-------------------- -+--------|| 65542 | 1 | 1 | -1 || 65542 | 2 | 1 | 100 || 65542 | 3 | 1 | 10000 |+------------------------------- -+---------+
Heldigvis for mig har jeg kun én opdelt tabel i denne database, så jeg bliver ikke bombarderet med resultater.
Som nævnt returnerer denne visning function_id
, så vi kan bruge det til at forbinde en masse andre tabeller, så vi kan returnere data for en bestemt tabel.
I mit tilfælde er dette overflødigt, da der kun er én opdelt tabel, men lad os antage, at du har en hel masse opdelte dynger og indekser, og du vil bare indsnævre det.
Begræns det til en tabel
Her er et eksempel på returnering af grænseområderne for en specifik tabel kaldet 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;
Resultat:
+---------------------+---------------+-------- ----------+| partitionsnummer | grænse_id | Grænseværdi ||---------------------+---------------------+-------- ----------|| 1 | 1 | -1 || 2 | 2 | 100 || 3 | 3 | 10.000 || 4 | NULL | NULL |+---------------------+---------------+-------- --------+
Her er det igen, men vi udvider valglisten til at inkludere andre oplysninger, såsom indeksnavnet, navnet på partitionsfunktionen osv.
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;
Resultat:
+--------+------------------------------+----- --------------+--------------------------------+-------- -------+-------------------------+| Tabel | Indeks | partitionsnummer | navn | grænse_id | Grænseværdi ||--------+-------------------------------------+----- --------------+--------------------------------+-------- -------+------------------|| Film | PK__Movies__4BD2941AD44D2FCF | 1 | MoviesPartitionFunction | 1 | -1 || Film | PK__Movies__4BD2941AD44D2FCF | 2 | MoviesPartitionFunction | 2 | 100 || Film | PK__Movies__4BD2941AD44D2FCF | 3 | MoviesPartitionFunction | 3 | 10.000 || Film | PK__Movies__4BD2941AD44D2FCF | 4 | MoviesPartitionFunction | NULL | NULL |+--------------------------- --------------+---------------------------------+--------- ------+------------------+
Her er resultatet igen ved at bruge lodret output (så du ikke behøver at rulle sidelæns):
-[ RECORD 1 ]-------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 1 navn | MoviesPartitionFunctionboundary_id | 1Grænseværdi | -1-[ REKORD 2 ]--------------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 2navn | MoviesPartitionFunctionboundary_id | 2Grænseværdi | 100-[ REKORD 3 ]-------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 3navn | MoviesPartitionFunctionboundary_id | 3Grænseværdi | 10000-[ REKORD 4 ]-------------------------Tabel | MoviesIndex | PK__Movies__4BD2941AD44D2FCFpartitionsnummer | 4navn | MoviesPartitionFunctionboundary_id | NULL grænseværdi | NULL