In SQL Server können Sie die sys.partition_range_values
verwenden Systemkatalogansicht, um die für eine partitionierte Tabelle verwendeten Grenzwerte herauszufinden.
Sie müssen jedoch die function_id
kennen der Partitionsfunktion, bevor Sie diese Ansicht verwenden.
Aber wie immer können Sie einen Join mit einer Reihe anderer Tische ausführen, um die gewünschten Informationen zu erhalten.
sys.partition_range_values
Sehen wir uns zunächst an, welche Spalten die sys.partition_range_values
enthalten Rücksendungen anzeigen.
SELECT * FROM sys.partition_range_values;
Ergebnis:
Zu meinem Glück habe ich nur eine partitionierte Tabelle in dieser Datenbank, sodass ich nicht mit Ergebnissen bombardiert werde.
Wie bereits erwähnt, gibt diese Ansicht die function_id
zurück , sodass wir das verwenden können, um eine Reihe anderer Tabellen zu verbinden, sodass wir Daten für eine bestimmte Tabelle zurückgeben können.
In meinem Fall ist dies überflüssig, da es nur eine partitionierte Tabelle gibt, aber nehmen wir an, Sie haben eine ganze Menge partitionierter Heaps und Indizes und möchten sie nur eingrenzen.
Grenzen Sie es auf eine Tabelle ein
Hier ist ein Beispiel für die Rückgabe der Grenzbereiche für eine bestimmte Tabelle namens 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;
Ergebnis:
+--------------------+---------------+--------- ---------+| Partitionsnummer | border_id | Grenzwert ||--------------------+---------------+--------- ---------|| 1 | 1 | -1 || 2 | 2 | 100 || 3 | 3 | 10000 || 4 | NULL | NULL |+--------------------+----------+---------- --------+
Hier ist es wieder, aber wir erweitern die Auswahlliste um weitere Informationen, wie den Indexnamen, den Namen der Partitionsfunktion usw.
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;
Ergebnis:
+---------+------------------------------+----- ------------------------------------+-------- -------+------------------+| Tabelle | Index | Partitionsnummer | Name | border_id | Grenzwert ||---------+------------------------------+----- ------------------------------------+-------- -------+------------------|| Filme | PK__Filme__4BD2941AD44D2FCF | 1 | MoviesPartitionFunction | 1 | -1 || Filme | PK__Filme__4BD2941AD44D2FCF | 2 | MoviesPartitionFunction | 2 | 100 || Filme | PK__Filme__4BD2941AD44D2FCF | 3 | MoviesPartitionFunction | 3 | 10000 || Filme | PK__Filme__4BD2941AD44D2FCF | 4 | MoviesPartitionFunction | NULL | NULL |+---------+------------------------------+------ --------------+-------------------------+--------- ------+------------------+
Hier ist das Ergebnis noch einmal mit vertikaler Ausgabe (damit Sie nicht seitwärts scrollen müssen):
-[ RECORD 1 ]-------------------------Tabelle | FilmeIndex | PK__Movies__4BD2941AD44D2FCFPartitionsnummer | 1Name | MoviesPartitionFunctionboundary_id | 1Grenzwert | -1-[ RECORD 2 ]-------------------------Tabelle | FilmeIndex | PK__Movies__4BD2941AD44D2FCFPartitionsnummer | 2name | MoviesPartitionFunctionboundary_id | 2Grenzwert | 100-[ RECORD 3 ]-------------------------Tabelle | FilmeIndex | PK__Movies__4BD2941AD44D2FCFPartitionsnummer | 3Name | MoviesPartitionFunctionboundary_id | 3Grenzwert | 10000-[ RECORD 4 ]-------------------------Tabelle | FilmeIndex | PK__Movies__4BD2941AD44D2FCFPartitionsnummer | 4Name | MoviesPartitionFunctionboundary_id | NULLGrenzwert | NULL