Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Herausfinden, welcher Partition ein bestimmter Wert in SQL Server (T-SQL) zugeordnet werden würde

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.