$PARTITION (Transact-SQL)
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance
Gibt die Partitionsnummer zurück, in der eine Reihe von Partitionierungsspaltenwerten für jede angegebene Partitionsfunktion zugeordnet werden kann.
Transact-SQL-Syntaxkonventionen
Syntax
[ database_name. ] $PARTITION.partition_function_name(expression)
Argumente
database_name
Der Name der Datenbank, die die Partitionsfunktion enthält.
partition_function_name
Der Name einer vorhandenen Partitionsfunktion, auf die eine Reihe von Partitionierungsspaltenwerten angewendet wird.
expression
Ein Ausdruck, dessen Datentyp entweder übereinstimmen oder implizit in den Datentyp der entsprechenden Partitionierungsspalte wandeln muss. Dieser Parameter kann auch der Name einer Partitionierungsspalte sein, die derzeit an partition_function_namebeteiligt ist.
Rückgabetypen
int
Bemerkungen
$PARTITION
gibt einen int Wert zwischen 1
und der Anzahl der Partitionsfunktionen zurück.
$PARTITION
gibt die Partitionsnummer für jeden gültigen Wert zurück, unabhängig davon, ob der Wert derzeit in einer partitionierten Tabelle oder einem Index vorhanden ist, die die Partitionsfunktion verwendet.
Beispiele
A. Abrufen der Partitionsnummer für eine Gruppe von Partitionierungsspaltenwerten
In diesem Beispiel wird die Partitionsfunktion RangePF1
mit RANGE LEFT erstellt, die eine Tabelle oder einen Index in vier Partitionen partitioniert.
$PARTITION
wird verwendet, um zu bestimmen, dass der Wert 10
, der die Partitionierungsspalte von RangePF1
darstellt, in partitions 1
der Tabelle eingefügt würde.
CREATE PARTITION FUNCTION RangePF1(INT)
AS RANGE LEFT
FOR VALUES (10, 100, 1000);
GO
SELECT $PARTITION.RangePF1 (10);
GO
B. Abrufen der Anzahl von Zeilen in jeder nicht leeren Partition einer partitionierten Tabelle oder eines partitionierten Index
In diesem Beispiel wird gezeigt, wie Sie mit $PARTITION
die Anzahl der Zeilen in jeder Partition der Tabelle zurückgeben, die Daten enthalten.
Hinweis
Um dieses Beispiel auszuführen, müssen Sie zuerst die Partitionsfunktion RangePF1
mithilfe des Codes im vorherigen Beispiel erstellen.
Erstellen Sie ein Partitionsschema
RangePS1
für die PartitionsfunktionRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Erstellen Sie eine Tabelle
dbo.PartitionTable
imRangePS1
Partitionsschema mitcol1
als Partitionsspalte.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Fügen Sie vier Zeilen in die
dbo.PartitionTable
Tabelle ein. Diese Zeilen werden basierend auf der PartitionsfunktionRangePF1
Definition in Partitionen eingefügt:1
und10
zu Partition1
wechseln, während500
und1000
zu3
wechseln.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Abfragen des
dbo.PartitionTable
und verwendet$PARTITION.RangePF1(col1)
in derGROUP BY
-Klausel, um die Anzahl der Zeilen in jeder Partition abzufragen, die Daten enthält.SELECT $PARTITION.RangePF1 (col1) AS Partition, COUNT(*) AS [COUNT] FROM dbo.PartitionTable GROUP BY $PARTITION.RangePF1 (col1) ORDER BY Partition; GO
Hier sehen Sie das Resultset.
Partition | COUNT |
---|---|
1 | 2 |
3 | 2 |
Zeilen werden nicht für Partitionsnummer 2
zurückgegeben, die vorhanden ist, aber keine Daten enthält.
C. Zurückgeben aller Zeilen aus einer Partition einer partitionierten Tabelle oder eines partitionierten Index
Im folgenden Beispiel werden alle Zeilen zurückgegeben, die in der Partition 3 der Tabelle PartitionTable
enthalten sind.
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1 (col1) = 3;
Hier sehen Sie das Resultset.
col1 | col2 |
---|---|
500 |
Eine weitere Zeile |
1000 |
Eine weitere Zeile |