$PARTITION (Transact-SQL)
platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance
Vrátí číslo oddílu, do kterého lze namapovat sadu hodnot oddílů sloupců pro libovolnou zadanou funkci oddílu.
Syntax
[ database_name. ] $PARTITION.partition_function_name(expression)
Argumenty
database_name
Název databáze, která obsahuje funkci oddílu.
partition_function_name
Název jakékoli existující funkce oddílu, pro kterou se používá sada hodnot sloupců dělení.
výrazu
Výraz , jehož datový typ se musí shodovat nebo implicitně převést na datový typ odpovídajícího sloupce dělení. Tento parametr může být také názvem sloupce dělení, který se aktuálně účastní partition_function_name.
Návratové typy
int
Poznámky
$PARTITION
vrátí hodnotu int mezi 1
a počtem oddílů funkce oddílu.
$PARTITION
vrátí číslo oddílu pro libovolnou platnou hodnotu bez ohledu na to, jestli hodnota aktuálně existuje v dělené tabulce nebo indexu, která používá funkci oddílu.
Příklady
A. Získání čísla oddílu pro sadu hodnot sloupců dělení
Tento příklad vytvoří funkci oddílu RangePF1
pomocí OBLAST VLEVO, která rozdělí tabulku nebo index do čtyř oddílů.
$PARTITION
slouží k určení, že hodnota 10
představující sloupec dělení RangePF1
by byla vložena do oddílu 1
tabulky.
CREATE PARTITION FUNCTION RangePF1(INT)
AS RANGE LEFT
FOR VALUES (10, 100, 1000);
GO
SELECT $PARTITION.RangePF1 (10);
GO
B. Získání počtuřádkůchchch
Tento příklad ukazuje, jak pomocí $PARTITION
vrátit počet řádků v každém oddílu tabulky, která obsahuje data.
Poznámka
Pokud chcete tento příklad spustit, musíte nejprve vytvořit funkci oddílu RangePF1
pomocí kódu v předchozím příkladu.
Vytvořte schéma oddílů,
RangePS1
, pro funkci oddíluRangePF1
.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
Vytvořte tabulku
dbo.PartitionTable
v schématu oddílůRangePS1
scol1
jako sloupce dělení.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
Vložte do tabulky
dbo.PartitionTable
čtyři řádky. Tyto řádky se vloží do oddílů na základě definiceRangePF1
funkce oddílu:1
a10
přejít na oddíl1
, zatímco500
a1000
přejít na3
.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
Dotazování
dbo.PartitionTable
a použití$PARTITION.RangePF1(col1)
v klauzuliGROUP BY
k dotazování počtu řádků v každém oddílu, který obsahuje data.SELECT $PARTITION.RangePF1 (col1) AS Partition, COUNT(*) AS [COUNT] FROM dbo.PartitionTable GROUP BY $PARTITION.RangePF1 (col1) ORDER BY Partition; GO
Tady je sada výsledků.
Oddíl | POČÍTAT |
---|---|
1 | 2 |
3 | 2 |
Řádky se nevrácejí pro číslo oddílu 2
, které existují, ale neobsahují data.
C. Vrácení všech řádků z jednoho oddílu dělené tabulky nebo indexu
Následující příklad vrátí všechny řádky, které jsou v oddílu 3 tabulky PartitionTable
.
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1 (col1) = 3;
Tady je sada výsledků.
sloupec 1 | sloupec 2 |
---|---|
500 |
jiný řádek |
1000 |
jiný řádek |
Související obsah
- dělené tabulky a indexy
- CREATE PARTITION FUNCTION (Transact-SQL)
- Úprava funkce oddílu
- Úprava schématu oddílů
-
sys.partition_functions (Transact-SQL) -
sys.partition_schemes (Transact-SQL)