Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Découvrez à quelle partition une valeur donnée serait mappée dans SQL Server (T-SQL)

Si vous avez une table ou un index partitionné dans SQL Server et que vous souhaitez déterminer la partition à laquelle une valeur donnée serait mappée, vous pouvez le faire rapidement et facilement avec le $PARTITION fonction système.

Tout ce que vous devez savoir est le nom de la fonction de partition (et bien sûr, la valeur qui vous intéresse).

Exemple

Voici un exemple pour illustrer.

SELECT $PARTITION.MoviesPartitionFunction(5);

Résultat :

+--------------------+
| (No column name)   |
|--------------------|
| 2                  |
+--------------------+

Dans ce cas, la valeur 5 irait dans la partition numéro 2.

Essayons d'autres valeurs.

SELECT 
    $PARTITION.MoviesPartitionFunction(-100) AS [-100],
    $PARTITION.MoviesPartitionFunction(100) AS [100],
    $PARTITION.MoviesPartitionFunction(1000) AS [1000],
    $PARTITION.MoviesPartitionFunction(100000) AS [100000];

Résultat :

+--------+-------+--------+----------+
| -100   | 100   | 1000   | 100000   |
|--------+-------+--------+----------|
| 1      | 2     | 3      | 4        |
+--------+-------+--------+----------+

Requêtes inter-bases de données

Vous pouvez également préfixer le nom de la base de données afin d'interroger une autre base de données.

SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);

Conversion des types de données

Le type de données de la valeur que vous fournissez doit correspondre ou être implicitement convertible en type de données de sa colonne de partitionnement correspondante.

Sinon, vous obtiendrez probablement l'erreur 245.

SELECT $PARTITION.MoviesPartitionFunction('Hey!');

Résultat :

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Hey!' to data type int.

Notez que $PARTITION renvoie le numéro de partition pour toute valeur valide, que la valeur existe actuellement dans une table ou un index partitionné qui utilise la fonction de partition.