$PARTITION (Transact-SQL)
SQL Server 2012 の、指定したパーティション関数に対して、パーティション分割列の値のセットがマップされるパーティション番号を返します。
構文
[ 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 AdventureWorks2012;
GO
CREATE PARTITION FUNCTION RangePF1 ( int )
AS RANGE FOR VALUES (10, 100, 1000) ;
GO
SELECT $PARTITION.RangePF1 (10) ;
GO
B. パーティション テーブルまたはパーティション インデックスについて、空でない各パーティション内の行数を取得する
次の例では、データを含むテーブル TransactionHistory の各パーティション内の行数を返します。 TransactionHistory テーブルではパーティション関数 TransactionRangePF1 が使用され、TransactionDate 列でパーティション分割されます。
この例を実行するには、 AdventureWorks2012 サンプル データベースに対して最初に PartitionAW.sql スクリプトを実行する必要があります。 詳細については、「PartitioningScript」を参照してください。
USE AdventureWorks2012;
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 内にあるすべての行を返します。
注 |
---|
この例を実行するには、 AdventureWorks2012 サンプル データベースに対して最初に PartitionAW.sql スクリプトを実行する必要があります。 詳細については、「PartitioningScript」を参照してください。 |
SELECT * FROM Production.TransactionHistory
WHERE $PARTITION.TransactionRangePF1(TransactionDate) = 5 ;