$PARTITION (Transact-SQL)
S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Retourne le numéro de partition dans lequel un ensemble de valeurs de colonne de partitionnement peut être mappé pour n’importe quelle fonction de partition spécifiée.
Conventions de la syntaxe Transact-SQL
Syntaxe
[ database_name. ] $PARTITION.partition_function_name(expression)
Arguments
database_name
Nom de la base de données qui contient la fonction de partition.
partition_function_name
Nom de toute fonction de partition existante par rapport à laquelle un ensemble de valeurs de colonne de partitionnement sont appliquées.
expression
Expression dont le type de données doit correspondre ou être implicitement convertible en type de données de sa colonne de partitionnement correspondante. Ce paramètre peut également être le nom d’une colonne de partitionnement qui participe actuellement à partition_function_name.
Types de retour
int
Notes
$PARTITION
retourne une valeur int entre 1
et le nombre de partitions de la fonction de partition.
$PARTITION
retourne 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.
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
est utilisé pour déterminer que la valeur 10
, représentant la colonne de partitionnement de RangePF1
, serait 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.
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.
Créez un schéma de partition,
RangePS1
, pour la fonction de partitionRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Créez une table,
dbo.PartitionTable
, sur le schéma de partitionRangePS1
aveccol1
comme colonne de partitionnement.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Insérez quatre lignes dans la table
dbo.PartitionTable
. Ces lignes sont insérées dans des partitions en fonction de la définitionRangePF1
de la fonction de partition :1
et10
accéder à la1
de partition, tandis que500
et1000
atteindre3
.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Interrogez le
dbo.PartitionTable
et utilisez$PARTITION.RangePF1(col1)
dans la clauseGROUP BY
pour interroger le nombre de lignes de chaque partition qui contient des données.SELECT $PARTITION.RangePF1 (col1) AS Partition, COUNT(*) AS [COUNT] FROM dbo.PartitionTable GROUP BY $PARTITION.RangePF1 (col1) ORDER BY Partition; GO
Voici le jeu de résultats.
Partition | COUNT |
---|---|
1 | 2 |
3 | 2 |
Les lignes ne sont pas retournées pour le numéro de partition 2
, qui existe mais ne contient 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;
Voici le jeu de résultats.
col1 | col2 |
---|---|
500 |
autre ligne |
1000 |
autre ligne |