$PARTITION (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Retourne le numéro de la partition dans laquelle un ensemble de valeurs de colonnes de partitionnement doit être mappé afin de pouvoir être utilisé par une fonction de partition précise.
Conventions de la syntaxe Transact-SQL
Syntaxe
[ database_name. ] $PARTITION.partition_function_name(expression)
Arguments
database_name
Nom de la base de données contenant la fonction de partition.
partition_function_name
Nom de la fonction de partition existante à laquelle un ensemble de valeurs de colonnes de partitionnement est appliqué.
expression
Expression dont le type de données doit correspondre au type de données de sa colonne de partitionnement correspondante ou être convertible de façon implicite en celui-ci. expression peut également représenter le nom d’une colonne de partitionnement participant actuellement à partition_function_name.
Types de retour
int
Notes
$PARTITION renvoie une valeur de type int comprise entre 1 et le nombre de partitions de la fonction de partition.
$PARTITION retourne le numéro de partition pour toute valeur valide, sans vérifier l'existence de celle-ci dans une table ou un index partitionné utilisant la fonction de partition.
Exemples
R. Récupération du numéro de partition pour un ensemble de valeurs de colonnes de partitionnement
Cet exemple crée une fonction de partition RangePF1
utilisant RANGE LEFT qui partitionne une table ou un index en quatre partitions. $PARTITION permet de déterminer si la valeur 10
, correspondant à la colonne de partitionnement de RangePF1
, doit être placée dans la partition 1 de la table.
CREATE PARTITION FUNCTION RangePF1 ( INT )
AS RANGE LEFT FOR VALUES (10, 100, 1000) ;
GO
SELECT $PARTITION.RangePF1 (10) ;
GO
B. Récupération du nombre de lignes de chaque partition non vide dans une table ou un index partitionné
Cet exemple montre comment utiliser $PARTITION
pour retourner le nombre de lignes dans chaque partition de table contenant des données.
L'exemple :
- Crée un schéma de partition,
RangePS1
, pour la fonction de partitionRangePF1
. - Crée une table,
dbo.PartitionTable
, sur le schéma de partitionRangePS1
aveccol1
comme colonne de partitionnement. - Insère quatre lignes dans le tableau
dbo.PartitionTable
. Selon la définition de la fonction de partition, ces lignes sont insérées dans les partitions 2 et 3. Les partitions 1 et 4 restent vides. - Interroge
dbo.PartitionTable
et utilise$PARTITION.RangePF1(col1)
dans la clause GROUP BY pour interroger le nombre de lignes de chaque partition contenant des données.
Notes
Pour exécuter cet exemple, vous devez d’abord créer la fonction de partition RangePF1
à l’aide du code de l’exemple précédent.
CREATE PARTITION SCHEME RangePS1
AS PARTITION RangePF1
ALL TO ('PRIMARY') ;
GO
CREATE TABLE dbo.PartitionTable (col1 int PRIMARY KEY, col2 char(10))
ON RangePS1 (col1) ;
GO
INSERT dbo.PartitionTable (col1, col2)
VALUES ((1,'a row'),(100,'another row'),(500,'another row'),(1000,'another row'))
SELECT
$PARTITION.RangePF1(col1) AS Partition,
COUNT(*) AS [COUNT]
FROM dbo.PartitionTable
GROUP BY $PARTITION.RangePF1(col1)
ORDER BY Partition ;
GO
La requête SELECT
doit retourner les résultats suivants :
Partition | COUNT |
---|---|
2 | 1 |
3 | 3 |
Les lignes ne sont pas retournées pour les partitions numéro 1 et 4 qui existent mais ne contiennent pas de données.
C. Retourne toutes les lignes d’une partition donnée faisant partie d’une table ou d’un index partitionné
L’exemple suivant retourne toutes les lignes de la partition 3 de la table PartitionTable
.
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1(col1) = 3 ;
Les résultats suivants doivent s’afficher :
col1 | col2 |
---|---|
101 | autre ligne |
500 | troisième ligne |
501 | quatrième ligne |
Étapes suivantes
En savoir plus sur le partitionnement de tables dans ces articles :