$PARTITION (Transact-SQL)
van toepassing op:SQL Server
Azure SQL Database
Azure 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 RangePF1
vertegenwoordigt, 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.
Maak een partitieschema,
RangePS1
, voor de partitiefunctieRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Maak een tabel,
dbo.PartitionTable
, in hetRangePS1
partitieschema metcol1
als de partitiekolom.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Voeg vier rijen in de
dbo.PartitionTable
tabel in. Deze rijen worden ingevoegd in partities op basis van de definitie van de partitiefunctieRangePF1
:1
en10
naar partitie1
gaan, terwijl500
en1000
naar3
gaan.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Voer een query uit op de
dbo.PartitionTable
en gebruikt$PARTITION.RangePF1(col1)
in deGROUP 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 |