Udostępnij za pośrednictwem


$PARTITION (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Zwraca numer partycji, do którego można zamapować zestaw wartości kolumn partycjonowania dla dowolnej określonej funkcji partycji.

Transact-SQL konwencje składni

Składnia

[ database_name. ] $PARTITION.partition_function_name(expression)

Argumenty

database_name

Nazwa bazy danych, która zawiera funkcję partycji.

partition_function_name

Nazwa dowolnej istniejącej funkcji partycji, względem której są stosowane zestaw wartości kolumn partycjonowania.

wyrażenia

Wyrażenie , którego typ danych musi być zgodny lub niejawnie konwertowany na typ danych odpowiadającej mu kolumny partycjonowania. Ten parametr może być również nazwą kolumny partycjonowania, która obecnie uczestniczy w partition_function_name.

Typy zwracane

Uwagi

$PARTITION zwraca wartość int między 1 a liczbą partycji funkcji partycji.

$PARTITION zwraca numer partycji dla dowolnej prawidłowej wartości, niezależnie od tego, czy wartość obecnie istnieje w tabeli partycjonowanej, czy indeksie używającym funkcji partycji.

Przykłady

A. Pobieranie numeru partycji dla zestawu wartości kolumn partycjonowania

W tym przykładzie tworzona jest funkcja partycji RangePF1 przy użyciu RANGE LEFT, która podzieli tabelę lub indeks na cztery partycje. $PARTITION służy do określania, że wartość 10, reprezentującą kolumnę partycjonowania RangePF1, zostanie umieszczona w 1 partycji tabeli.

CREATE PARTITION FUNCTION RangePF1(INT)
    AS RANGE LEFT
    FOR VALUES (10, 100, 1000);
GO

SELECT $PARTITION.RangePF1 (10);
GO

B. Pobieranie liczby wierszy w każdej niespodziewanej partycji partycjonowanej tabeli lub indeksu

W tym przykładzie pokazano, jak użyć $PARTITION, aby zwrócić liczbę wierszy w każdej partycji tabeli zawierającej dane.

Nuta

Aby wykonać ten przykład, musisz najpierw utworzyć funkcję partycji RangePF1 przy użyciu kodu w poprzednim przykładzie.

  1. Utwórz schemat partycji, RangePS1, dla funkcji partycji RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Utwórz tabelę dbo.PartitionTablew schemacie partycji RangePS1 z col1 jako kolumną partycjonowania.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Wstaw cztery wiersze do tabeli dbo.PartitionTable. Te wiersze są wstawiane do partycji na podstawie definicji funkcji partycji RangePF1: 1 i 10 przejść do 1partycji, a 500 i 1000 przejść do 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Wykonaj zapytanie względem dbo.PartitionTable i użyj $PARTITION.RangePF1(col1) w klauzuli GROUP BY, aby wysłać zapytanie o liczbę wierszy w każdej partycji zawierającej dane.

    SELECT $PARTITION.RangePF1 (col1) AS Partition,
           COUNT(*) AS [COUNT]
    FROM dbo.PartitionTable
    GROUP BY $PARTITION.RangePF1 (col1)
    ORDER BY Partition;
    GO
    

Oto zestaw wyników.

Partycja HRABIA
1 2
3 2

Wiersze nie są zwracane dla numeru partycji 2, który istnieje, ale nie zawiera danych.

C. Zwracanie wszystkich wierszy z jednej partycji tabeli partycjonowanej lub indeksu

Poniższy przykład zwraca wszystkie wiersze, które znajdują się w partycji 3 tabeli PartitionTable.

SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1 (col1) = 3;

Oto zestaw wyników.

kolumna 1 kolumna 2
500 inny wiersz
1000 inny wiersz