$PARTITION (Transact-SQL)
適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
指定したパーティション関数に対してパーティション分割列の値のセットをマップできるパーティション番号を返します。
構文
[ 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
を作成する必要があります。
パーティション関数
RangePF1
のパーティション構成RangePS1
を作成します。CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GO
パーティション分割列として
col1
を使用して、RangePS1
パーティション構成にdbo.PartitionTable
テーブルを作成します。CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GO
dbo.PartitionTable
テーブルに 4 行を挿入します。 これらの行は、パーティション関数RangePF1
定義に基づいてパーティションに挿入されます。1
と10
はパーティション1
に移動し、500
して3
に移動1000
。INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GO
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 |
別の行 |