次の方法で共有


$PARTITION (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

指定したパーティション関数に対してパーティション分割列の値のセットをマップできるパーティション番号を返します。

Transact-SQL 構文表記規則

構文

[ database_name. ] $PARTITION.partition_function_name(expression)

引数

database_name

パーティション関数を含むデータベースの名前。

partition_function_name

パーティション分割列の値のセットが適用されている既存のパーティション関数の名前。

式 (expression)

、データ型が対応するパーティション分割列のデータ型と一致するか、暗黙的に変換できる必要があります。 このパラメーターには、現在 partition_function_nameに参加しているパーティション分割列の名前を指定することもできます。

戻り値の型

int

解説

$PARTITION は、1 とパーティション関数のパーティション数の間の int 値を返します。

$PARTITION は、パーティション関数を使用するパーティション テーブルまたはインデックスに値が現在存在するかどうかに関係なく、任意の有効な値のパーティション番号を返します。

A. パーティション分割列の値のセットに対してパーティション番号を取得する

この例では、RangePF1 を使用してパーティション関数 を作成します。これにより、テーブルまたはインデックスが 4 つのパーティションに分割されます。 $PARTITION は、RangePF1のパーティション分割列を表す 10値がテーブルのパーティション 1 に配置されることを決定するために使用されます。

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

SELECT $PARTITION.RangePF1 (10);
GO

B. パーティション テーブルまたはパーティション インデックスについて、空でない各パーティション内の行数を取得する

この例では、$PARTITION を使ってデータを含むテーブルの各パーティション内の行数を返す方法を示します。

Note

この例を実行するには、まず前の例のコードを使用してパーティション関数 RangePF1 を作成する必要があります。

  1. パーティション関数 RangePF1のパーティション構成 RangePS1を作成します。

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. パーティション分割列として col1 を使用して、RangePS1 パーティション構成に dbo.PartitionTableテーブルを作成します。

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. dbo.PartitionTable テーブルに 4 行を挿入します。 これらの行は、パーティション関数 RangePF1 定義に基づいてパーティションに挿入されます。110 はパーティション 1に移動し、500 して 3に移動 1000

    INSERT dbo.PartitionTable (col1, col2)
    VALUES (1, 'a row'),
        (10, 'another row'),
        (500, 'another row'),
        (1000, 'another row');
    GO
    
  4. dbo.PartitionTable のクエリを実行し、GROUP BY 句の $PARTITION.RangePF1(col1) を使用して、データを含む各パーティションの行数を照会します。

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

結果セットを次に示します。

Partition [COUNT]
1 2
3 2

パーティション番号 2の行は返されません。これは存在しますが、データは含まれません。

C. パーティション テーブルまたはパーティション インデックスの 1 つのパーティションからすべての行を返す

次の例では、テーブル PartitionTable のパーティション 3 内にあるすべての行を返します。

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

結果セットを次に示します。

col1 col2
500 別の行
1000 別の行