$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.
Skapa ett partitionsschema
RangePS1
för partitionsfunktionenRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Skapa en tabell,
dbo.PartitionTable
, i partitionsschematRangePS1
medcol1
som partitioneringskolumn.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Infoga fyra rader i tabellen
dbo.PartitionTable
. Dessa rader infogas i partitioner baserat på partitionsfunktionenRangePF1
definition:1
och10
gå till partition1
, medan500
och1000
gå till3
.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Fråga
dbo.PartitionTable
och använder$PARTITION.RangePF1(col1)
iGROUP 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 |