Partage via


$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 partition RangePF1.
  • Crée une table, dbo.PartitionTable, sur le schéma de partition RangePS1 avec col1 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 :