$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 返します、 int 1 ~ パーティション関数のパーティションの数の値です。
$PARTITION は、値が現在パーティション関数を使用するパーティション テーブルまたはインデックスに存在するかどうかに関係なく、有効な値のパーティション番号を返します。
例
A. パーティション分割列の値のセットに対してパーティション番号を取得する
この例では、RANGE LEFT を使用してパーティション関数 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
を使ってデータを含むテーブルの各パーティション内の行数を返す方法を示します。
この例では、次の処理を実行します。
- パーティション関数
RangePF1
のパーティション構成RangePS1
を作成します。 - パーティション構成
RangePS1
に対して、パーティション分割列としてcol1
を使用するテーブルdbo.PartitionTable
を作成します。 dbo.PartitionTable
テーブルに 4 つの行を挿入します。 パーティション関数の定義に基づいて、これらの行はパーティション 2 と 3 に挿入されます。 パーティション 1 と 4 は空のままになります。dbo.PartitionTable
のクエリを実行し、GROUP BY 句で$PARTITION.RangePF1(col1)
を使用し、データを含む各パーティションの行数に対してクエリを実行します。
Note
この例を実行するには、まず前の例のコードを使用してパーティション関数 RangePF1
を作成する必要があります。
CREATE PARTITION SCHEME RangePS1
AS PARTITION RangePF1
ALL TO ('PRIMARY') ;
GO
CREATE TABLE dbo.PartitionTable (col1 int PRIMARY KEY, col2 char(10))
ON RangePS1 (col1) ;
GO
INSERT dbo.PartitionTable (col1, col2)
VALUES ((1,'a row'),(100,'another row'),(500,'another row'),(1000,'another row'))
SELECT
$PARTITION.RangePF1(col1) AS Partition,
COUNT(*) AS [COUNT]
FROM dbo.PartitionTable
GROUP BY $PARTITION.RangePF1(col1)
ORDER BY Partition ;
GO
SELECT
クエリにより、次の結果が得られます。
Partition | [COUNT] |
---|---|
2 | 1 |
3 | 3 |
存在するがデータを含まないパーティション番号 1 と 4 の行は返されません。
C. パーティション テーブルまたはパーティション インデックスの 1 つのパーティションからすべての行を返す
次の例では、テーブル PartitionTable
のパーティション 3 内にあるすべての行を返します。
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1(col1) = 3 ;
このクエリにより、次の結果が得られます。
col1 | col2 |
---|---|
101 | 別の行 |
500 | 3 行目 |
501 | 4 行目 |
次のステップ
テーブルのパーティション分割の詳細については、次の記事を参照してください。