Freigeben über


$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 RangePF1darstellt, 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.

  1. Erstellen Sie ein Partitionsschema RangePS1für die Partitionsfunktion RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Erstellen Sie eine Tabelle dbo.PartitionTableim RangePS1 Partitionsschema mit col1 als Partitionsspalte.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Fügen Sie vier Zeilen in die dbo.PartitionTable Tabelle ein. Diese Zeilen werden basierend auf der Partitionsfunktion RangePF1 Definition in Partitionen eingefügt: 1 und 10 zu Partition 1wechseln, während 500 und 1000 zu 3wechseln.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Abfragen des dbo.PartitionTable und verwendet $PARTITION.RangePF1(col1) in der GROUP 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 2zurü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