適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
指定したパーティション関数に対してパーティション分割列の値のセットをマップできるパーティション番号を返します。
構文
[ database_name. ] $PARTITION.partition_function_name(expression)
引数
database_name
パーティション関数を含むデータベースの名前。
partition_function_name
パーティション分割列の値のセットが適用されている既存のパーティション関数の名前。
式 (expression)
式、データ型が対応するパーティション分割列のデータ型と一致するか、暗黙的に変換できる必要があります。 このパラメーターには、現在 partition_function_nameに参加しているパーティション分割列の名前を指定することもできます。
戻り値の型
int
解説
$PARTITION は、 とパーティション関数のパーティション数の間の 1 値を返します。
$PARTITION は、パーティション関数を使用するパーティション テーブルまたはインデックスに値が現在存在するかどうかに関係なく、任意の有効な値のパーティション番号を返します。
例
A. パーティション分割列の値のセットに対してパーティション番号を取得する
この例では、RangePF1 を使用してパーティション関数 を作成します。これにより、テーブルまたはインデックスが 4 つのパーティションに分割されます。
$PARTITION は、10のパーティション分割列を表す RangePF1値がテーブルのパーティション 1 に配置されることを決定するために使用されます。
CREATE PARTITION FUNCTION RangePF1(INT)
AS RANGE LEFT
FOR VALUES (10, 100, 1000);
GO
SELECT $PARTITION.RangePF1 (10);
GO
B. パーティション テーブルまたはパーティション インデックスについて、空でない各パーティション内の行数を取得する
この例では、$PARTITION を使ってデータを含むテーブルの各パーティション内の行数を返す方法を示します。
Note
この例を実行するには、まず前の例のコードを使用してパーティション関数 RangePF1 を作成する必要があります。
パーティション関数
RangePS1のパーティション構成RangePF1を作成します。CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GOパーティション分割列として
dbo.PartitionTableを使用して、RangePS1パーティション構成にcol1テーブルを作成します。CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GOdbo.PartitionTableテーブルに 4 行を挿入します。 これらの行は、パーティション関数RangePF1定義に基づいてパーティションに挿入されます。1と10はパーティション1に移動し、500して1000に移動3。INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GOdbo.PartitionTableのクエリを実行し、$PARTITION.RangePF1(col1)句のGROUP BYを使用して、データを含む各パーティションの行数を照会します。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 |
別の行 |