$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.
Utwórz schemat partycji,
RangePS1
, dla funkcji partycjiRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Utwórz tabelę
dbo.PartitionTable
w schemacie partycjiRangePS1
zcol1
jako kolumną partycjonowania.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Wstaw cztery wiersze do tabeli
dbo.PartitionTable
. Te wiersze są wstawiane do partycji na podstawie definicji funkcji partycjiRangePF1
:1
i10
przejść do1
partycji, a500
i1000
przejść do3
.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Wykonaj zapytanie względem
dbo.PartitionTable
i użyj$PARTITION.RangePF1(col1)
w klauzuliGROUP 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 |