Se si dispone di una tabella o di un indice partizionato in SQL Server e si desidera determinare a quale partizione verrà mappato un determinato valore, è possibile farlo in modo semplice e rapido con $PARTITION
funzione di sistema.
Tutto quello che devi sapere è il nome della funzione di partizione (e, naturalmente, il valore che ti interessa).
Esempio
Ecco un esempio da dimostrare.
SELECT $PARTITION.MoviesPartitionFunction(5);
Risultato:
+--------------------+ | (No column name) | |--------------------| | 2 | +--------------------+
In questo caso, il valore 5
andrebbe nella partizione numero 2.
Proviamo con altri valori.
SELECT
$PARTITION.MoviesPartitionFunction(-100) AS [-100],
$PARTITION.MoviesPartitionFunction(100) AS [100],
$PARTITION.MoviesPartitionFunction(1000) AS [1000],
$PARTITION.MoviesPartitionFunction(100000) AS [100000];
Risultato:
+--------+-------+--------+----------+ | -100 | 100 | 1000 | 100000 | |--------+-------+--------+----------| | 1 | 2 | 3 | 4 | +--------+-------+--------+----------+
Query tra database
Puoi anche anteporre il nome del database per interrogare un database diverso.
SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);
Conversione del tipo di dati
Il tipo di dati del valore fornito deve corrispondere o essere convertibile in modo implicito nel tipo di dati della colonna di partizionamento corrispondente.
In caso contrario, probabilmente riceverai l'errore 245.
SELECT $PARTITION.MoviesPartitionFunction('Hey!');
Risultato:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Hey!' to data type int.
Nota che $PARTITION
restituisce il numero di partizione per qualsiasi valore valido, indipendentemente dal fatto che il valore esista attualmente in una tabella partizionata o in un indice che utilizza la funzione di partizione.