Jeśli masz podzieloną na partycje tabelę lub indeks w SQL Server i chcesz określić, do której partycji zostanie zmapowana dana wartość, możesz to zrobić szybko i ładnie za pomocą $PARTITION
funkcja systemu.
Wszystko, co musisz wiedzieć, to nazwa funkcji partycji (i oczywiście interesująca Cię wartość).
Przykład
Oto przykład do zademonstrowania.
SELECT $PARTITION.MoviesPartitionFunction(5);
Wynik:
+--------------------+ | (No column name) | |--------------------| | 2 | +--------------------+
W tym przypadku wartość 5
przejdzie do partycji numer 2.
Wypróbujmy inne wartości.
SELECT
$PARTITION.MoviesPartitionFunction(-100) AS [-100],
$PARTITION.MoviesPartitionFunction(100) AS [100],
$PARTITION.MoviesPartitionFunction(1000) AS [1000],
$PARTITION.MoviesPartitionFunction(100000) AS [100000];
Wynik:
+--------+-------+--------+----------+ | -100 | 100 | 1000 | 100000 | |--------+-------+--------+----------| | 1 | 2 | 3 | 4 | +--------+-------+--------+----------+
Zapytania między bazami danych
Możesz także poprzedzić nazwę bazy danych, aby wyszukać inną bazę danych.
SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);
Konwersja typu danych
Typ danych podanej wartości musi być zgodny lub niejawnie przekonwertowany na typ danych odpowiadającej mu kolumny partycjonowania.
Jeśli nie, prawdopodobnie otrzymasz błąd 245.
SELECT $PARTITION.MoviesPartitionFunction('Hey!');
Wynik:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Hey!' to data type int.
Zwróć uwagę, że $PARTITION
zwraca numer partycji dla dowolnej prawidłowej wartości, niezależnie od tego, czy wartość aktualnie istnieje w partycjonowanej tabeli lub indeksie, który używa funkcji partycji.