Partager via


$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.

  1. Créez un schéma de partition, RangePS1, pour la fonction de partition RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Créez une table, dbo.PartitionTable, sur le schéma de partition RangePS1 avec col1 comme colonne de partitionnement.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Insérez quatre lignes dans la table dbo.PartitionTable. Ces lignes sont insérées dans des partitions en fonction de la définition RangePF1 de la fonction de partition : 1 et 10 accéder à la 1de partition, tandis que 500 et 1000 atteindre 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Interrogez le dbo.PartitionTable et utilisez $PARTITION.RangePF1(col1) dans la clause GROUP 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