Delen via


$PARTITION (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Retourneert het partitienummer waarin een set partitioneringskolomwaarden kan worden toegewezen voor een opgegeven partitiefunctie.

Transact-SQL syntaxisconventies

Syntaxis

[ database_name. ] $PARTITION.partition_function_name(expression)

Argumenten

database_name

De naam van de database die de partitiefunctie bevat.

partition_function_name

De naam van een bestaande partitiefunctie waarmee een set partitioneringskolomwaarden wordt toegepast.

expressie

Een expressie waarvan het gegevenstype moet overeenkomen of impliciet moeten worden omgezet in het gegevenstype van de bijbehorende partitioneringskolom. Deze parameter kan ook de naam zijn van een partitioneringskolom die momenteel deelneemt aan partition_function_name.

Retourtypen

Opmerkingen

$PARTITION retourneert een int waarde tussen 1 en het aantal partities van de partitiefunctie.

$PARTITION retourneert het partitienummer voor een geldige waarde, ongeacht of de waarde momenteel bestaat in een gepartitioneerde tabel of index die gebruikmaakt van de partitiefunctie.

Voorbeelden

Een. Het partitienummer ophalen voor een set partitioneringskolomwaarden

In dit voorbeeld wordt een partitiefunctie gemaakt RangePF1 met BEREIK LINKS waarmee een tabel of index wordt gepartitioneert in vier partities. $PARTITION wordt gebruikt om te bepalen of de waarde 10, die de partitiekolom van RangePF1vertegenwoordigt, in partities 1 van de tabel wordt geplaatst.

CREATE PARTITION FUNCTION RangePF1(INT)
    AS RANGE LEFT
    FOR VALUES (10, 100, 1000);
GO

SELECT $PARTITION.RangePF1 (10);
GO

B. Het aantal rijen in elke lege partitie van een gepartitioneerde tabel of index ophalen

In dit voorbeeld ziet u hoe u $PARTITION gebruikt om het aantal rijen in elke partitie van de tabel met gegevens te retourneren.

Notitie

Als u dit voorbeeld wilt uitvoeren, moet u eerst de partitiefunctie maken RangePF1 met behulp van de code in het vorige voorbeeld.

  1. Maak een partitieschema, RangePS1, voor de partitiefunctie RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Maak een tabel, dbo.PartitionTable, in het RangePS1 partitieschema met col1 als de partitiekolom.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Voeg vier rijen in de dbo.PartitionTable tabel in. Deze rijen worden ingevoegd in partities op basis van de definitie van de partitiefunctie RangePF1: 1 en 10 naar partitie 1gaan, terwijl 500 en 1000 naar 3gaan.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Voer een query uit op de dbo.PartitionTable en gebruikt $PARTITION.RangePF1(col1) in de GROUP BY component om een query uit te voeren op het aantal rijen in elke partitie die gegevens bevat.

    SELECT $PARTITION.RangePF1 (col1) AS Partition,
           COUNT(*) AS [COUNT]
    FROM dbo.PartitionTable
    GROUP BY $PARTITION.RangePF1 (col1)
    ORDER BY Partition;
    GO
    

Dit is de resultatenset.

Verdelen TELLEN
1 2
3 2

Rijen worden niet geretourneerd voor partitienummer 2, die wel bestaan, maar geen gegevens bevatten.

C. Alle rijen van één partitie van een gepartitioneerde tabel of index retourneren

In het volgende voorbeeld worden alle rijen geretourneerd die zich in partitie 3 van de tabel bevinden PartitionTable.

SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1 (col1) = 3;

Dit is de resultatenset.

col1 kolom2
500 een andere rij
1000 een andere rij