Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure 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
RangePS1för partitionsfunktionenRangePF1.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GOSkapa en tabell,
dbo.PartitionTable, i partitionsschematRangePS1medcol1som partitioneringskolumn.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GOInfoga fyra rader i tabellen
dbo.PartitionTable. Dessa rader infogas i partitioner baserat på partitionsfunktionenRangePF1definition:1och10gå till partition1, medan500och1000gå till3.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GOFråga
dbo.PartitionTableoch 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 |