$PARTITION (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Gibt die Nummer der Partition zurück, der eine Gruppe von Partitionsspaltenwerten für eine beliebige angegebene Partitionsfunktion zugeordnet würde.
Transact-SQL-Syntaxkonventionen
Syntax
[ database_name. ] $PARTITION.partition_function_name(expression)
Argumente
database_name
Der Name der Datenbank, die die gespeicherte Partitionsfunktion enthält.
partition_function_name
Der Name einer beliebigen, vorhandenen Partitionsfunktion, für die eine Gruppe von Partitionierungsspaltenwerten angegeben wird.
expression
Ein Ausdruck, dessen Datentyp mit der zugehörigen Partitionierungsspalte entweder übereinstimmen oder implizit in diesen konvertierbar sein muss. expression kann auch der Name einer Partitionierungsspalte sein, die gerade an partition_function_name teilnimmt.
Rückgabetypen
int
Bemerkungen
$PARTITION gibt einen int-Wert zwischen 1 und der Anzahl von der Partitionierungsfunktion betroffenen Partitionen zurück.
$PARTITION gibt die Partitionsnummer für jeden gültigen Wert zurück. Dabei spielt es keine Rolle, ob der Wert sich zurzeit in einer partitionierten Tabelle oder einem partitionierten Index befindet, die/der 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. Mit $PARTITION wird bestimmt, dass der Wert 10
, der für die Partitionierungsspalte von RangePF1
steht, in Partition 1 der Tabelle eingefügt wird.
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.
Beispiel:
- Erstellt das Partitionsschema
RangePS1
für die PartitionsfunktionRangePF1
. - Erstellt die Tabelle
dbo.PartitionTable
im PartitionsschemaRangePS1
mitcol1
als Partitionsspalte. - Fügt vier Zeilen in die Tabelle
dbo.PartitionTable
ein. Basierend auf der Definition der Partitionsfunktion werden diese Zeilen in die Partitionen 2 und 3 eingefügt. Die Partitionen 1 und 4 bleiben leer. - Ruft die
dbo.PartitionTable
ab und verwendet$PARTITION.RangePF1(col1)
in der GROUP BY-Klausel, um die Anzahl der Zeilen in jeder Partition abzufragen, die Daten enthalten.
Hinweis
Um dieses Beispiel auszuführen, müssen Sie zuerst die Partitionsfunktion RangePF1
mithilfe des Codes im vorherigen Beispiel erstellen.
CREATE PARTITION SCHEME RangePS1
AS PARTITION RangePF1
ALL TO ('PRIMARY') ;
GO
CREATE TABLE dbo.PartitionTable (col1 int PRIMARY KEY, col2 char(10))
ON RangePS1 (col1) ;
GO
INSERT dbo.PartitionTable (col1, col2)
VALUES ((1,'a row'),(100,'another row'),(500,'another row'),(1000,'another row'))
SELECT
$PARTITION.RangePF1(col1) AS Partition,
COUNT(*) AS [COUNT]
FROM dbo.PartitionTable
GROUP BY $PARTITION.RangePF1(col1)
ORDER BY Partition ;
GO
Für die SELECT
-Abfrage sollten die folgenden Ergebnisse zurückgegeben werden:
Partition | COUNT |
---|---|
2 | 1 |
3 | 3 |
Es werden keine Zeilen für die Partitionen 1 und 4 zurückgegeben, die zwar vorhanden sind, aber keine Daten enthalten.
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 ;
Für diese Abfrage sollten die folgenden Ergebnisse zurückgegeben werden:
col1 | col2 |
---|---|
101 | Eine weitere Zeile |
500 | Eine dritte Zeile |
501 | Eine vierte Zeile |
Nächste Schritte
In den folgenden Artikeln erfahren Sie mehr über die Tabellenpartitionierung: