Sdílet prostřednictvím


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

Transact-SQL konvence syntaxe

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 10představující sloupec dělení RangePF1by 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.

  1. Vytvořte schéma oddílů, RangePS1, pro funkci oddílu RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Vytvořte tabulku dbo.PartitionTablev schématu oddílů RangePS1 s col1 jako sloupce dělení.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Vložte do tabulky dbo.PartitionTable čtyři řádky. Tyto řádky se vloží do oddílů na základě definice RangePF1 funkce oddílu: 1 a 10 přejít na oddíl 1, zatímco 500 a 1000 přejít na 3.

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. Dotazování dbo.PartitionTable a použití $PARTITION.RangePF1(col1) v klauzuli GROUP 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