Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Scopri a quale partizione verrebbe mappato un determinato valore in SQL Server (T-SQL)

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.