$PARTITION (Transact-SQL)

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

[ database_name. ] $PARTITION.partition_function_name(expression)

引数

  • database_name
    パーティション関数を含むデータベースの名前を指定します。

  • partition_function_name
    パーティション分割列の値のセットが適用される、既存のパーティション関数の名前を指定します。

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

戻り値の型

int

説明

$PARTITION では、int 型の値が返されます。1 以上、かつパーティション関数のパーティション数以下の値が返されます。

$PARTITION では、指定したパーティション関数を使用するパーティション テーブルやパーティション インデックスに値が存在しているかどうかに関係なく、有効な値に対してパーティション番号が返されます。

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

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

USE AdventureWorks2008R2 ;
GO
CREATE PARTITION FUNCTION RangePF1 ( int )
AS RANGE FOR VALUES (10, 100, 1000) ;
GO
SELECT $PARTITION.RangePF1 (10) ;
GO

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

次の例では、データを含むテーブル TransactionHistory の各パーティション内の行数を返します。TransactionHistory テーブルではパーティション関数 TransactionRangePF1 が使用され、TransactionDate 列でパーティション分割されます。

注意

この例を実行するには、AdventureWorks2008R2 サンプル データベースに対して最初に PartitionAW.sql スクリプトを実行する必要があります。詳細については、「SQL Server のサンプルとサンプル データベースのインストールに関する注意点」を参照してください。

USE AdventureWorks2008R2 ;
GO
SELECT $PARTITION.TransactionRangePF1(TransactionDate) AS Partition, 
COUNT(*) AS [COUNT] FROM Production.TransactionHistory 
GROUP BY $PARTITION.TransactionRangePF1(TransactionDate)
ORDER BY Partition ;
GO

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

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

注意

この例を実行するには、AdventureWorks2008R2 サンプル データベースに対して最初に PartitionAW.sql スクリプトを実行する必要があります。詳細については、「SQL Server のサンプルとサンプル データベースのインストールに関する注意点」を参照してください。

SELECT * FROM Production.TransactionHistory
WHERE $PARTITION.TransactionRangePF1(TransactionDate) = 5 ;