Wenn Sie eine partitionierte Tabelle oder einen Index in SQL Server haben und bestimmen möchten, welcher Partition ein bestimmter Wert zugeordnet wird, können Sie dies schnell und einfach mit $PARTITION
tun Systemfunktion.
Alles, was Sie wissen müssen, ist der Name der Partitionsfunktion (und natürlich der Wert, an dem Sie interessiert sind).
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SELECT $PARTITION.MoviesPartitionFunction(5);
Ergebnis:
+--------------------+ | (No column name) | |--------------------| | 2 | +--------------------+
In diesem Fall der Wert 5
würde in Partition Nummer 2 gehen.
Lassen Sie uns einige andere Werte ausprobieren.
SELECT
$PARTITION.MoviesPartitionFunction(-100) AS [-100],
$PARTITION.MoviesPartitionFunction(100) AS [100],
$PARTITION.MoviesPartitionFunction(1000) AS [1000],
$PARTITION.MoviesPartitionFunction(100000) AS [100000];
Ergebnis:
+--------+-------+--------+----------+ | -100 | 100 | 1000 | 100000 | |--------+-------+--------+----------| | 1 | 2 | 3 | 4 | +--------+-------+--------+----------+
Datenbankübergreifende Abfragen
Sie können dem Datenbanknamen auch ein Präfix voranstellen, um eine andere Datenbank abzufragen.
SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);
Datentypkonvertierung
Der Datentyp des von Ihnen bereitgestellten Werts muss entweder mit dem Datentyp der entsprechenden Partitionierungsspalte übereinstimmen oder implizit in diesen konvertierbar sein.
Wenn nicht, erhalten Sie wahrscheinlich Fehler 245.
SELECT $PARTITION.MoviesPartitionFunction('Hey!');
Ergebnis:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Hey!' to data type int.
Beachten Sie, dass $PARTITION
gibt die Partitionsnummer für jeden gültigen Wert zurück, unabhängig davon, ob der Wert derzeit in einer partitionierten Tabelle oder einem Index vorhanden ist, der die Partitionsfunktion verwendet.