Dela via


$PARTITION (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Returnerar partitionsnumret som en uppsättning partitioneringskolumnvärden kan mappas till för en angiven partitionsfunktion.

Transact-SQL syntaxkonventioner

Syntax

[ database_name. ] $PARTITION.partition_function_name(expression)

Argument

database_name

Namnet på databasen som innehåller partitionsfunktionen.

partition_function_name

Namnet på en befintlig partitionsfunktion som en uppsättning partitioneringskolumnvärden tillämpas mot.

uttryck

Ett uttryck vars datatyp antingen måste matcha eller implicit konverteras till datatypen för motsvarande partitioneringskolumn. Den här parametern kan också vara namnet på en partitioneringskolumn som för närvarande deltar i partition_function_name.

Returtyper

int

Anmärkningar

$PARTITION returnerar ett int värde mellan 1 och antalet partitioner i partitionsfunktionen.

$PARTITION returnerar partitionsnumret för valfritt giltigt värde, oavsett om värdet för närvarande finns i en partitionerad tabell eller ett index som använder partitionsfunktionen.

Exempel

A. Hämta partitionsnumret för en uppsättning partitioneringskolumnvärden

I det här exemplet skapas en partitionsfunktion RangePF1 med INTERVALL VÄNSTER som partitionera en tabell eller ett index i fyra partitioner. $PARTITION används för att fastställa att värdet 10, som representerar partitioneringskolumnen i RangePF1, skulle placeras i partitionen 1 i tabellen.

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

SELECT $PARTITION.RangePF1 (10);
GO

B. Hämta antalet rader i varje icke-partition i en partitionerad tabell eller ett index

Det här exemplet visar hur du använder $PARTITION för att returnera antalet rader i varje partition i tabellen som innehåller data.

Not

Om du vill köra det här exemplet måste du först skapa partitionsfunktionen RangePF1 med hjälp av koden i föregående exempel.

  1. Skapa ett partitionsschema RangePS1för partitionsfunktionen RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Skapa en tabell, dbo.PartitionTable, i partitionsschemat RangePS1 med col1 som partitioneringskolumn.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Infoga fyra rader i tabellen dbo.PartitionTable. Dessa rader infogas i partitioner baserat på partitionsfunktionen RangePF1 definition: 1 och 10 gå till partition 1, medan 500 och 1000 gå till 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Fråga dbo.PartitionTable och använder $PARTITION.RangePF1(col1) i GROUP BY-satsen för att fråga antalet rader i varje partition som innehåller data.

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

Här är resultatuppsättningen.

Skifte RÄKNA
1 2
3 2

Rader returneras inte för partitionsnummer 2, som finns men inte innehåller data.

C. Returnera alla rader från en partition i en partitionerad tabell eller ett index

I följande exempel returneras alla rader som finns i partition 3 i tabellen PartitionTable.

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

Här är resultatuppsättningen.

col1 col2
500 en annan rad
1000 en annan rad