指定されたパーティションスキーム名について、以下のセットを取得する必要があります
このmustは、スキーマに参加しているテーブルが存在しなくても機能します。
つまりsys.indexesによる結合は機能しません。
私は考えます答えはsys.destination_data_spacesにありますが、sys.partition_range_valuesへの結合をまだ理解していません。
この関係は完全に直感的ではありませんが、このクエリで必要なものが得られると思います。
SELECT
PScheme = ps.name,
PFunction = pf.name,
Boundary = dds.destination_id,
BoundaryValue = prv.value,
[Filegroup] = fg.name
FROM sys.partition_schemes AS ps
INNER JOIN sys.partition_functions AS pf
ON ps.function_id = pf.function_id
INNER JOIN sys.destination_data_spaces AS dds
ON ps.data_space_id = dds.partition_scheme_id
INNER JOIN sys.filegroups AS fg
ON dds.data_space_id = fg.data_space_id
LEFT OUTER JOIN sys.partition_range_values AS prv
ON dds.destination_id = pf.boundary_value_on_right + prv.boundary_id
AND prv.function_id = pf.function_id;
そして、LEFT
/RIGHT
は常に私にとって面倒な精神的な練習なので、最後から2行目のboundary_value_on_right
の部分を反転する必要があるかもしれません。
ON dds.destination_id = prv.boundary_id + ABS(1-pf.boundary_value_on_right)
テーブルを作成する必要はありません。
Aaronの回答をジャンプオフとして使用して、これを取得しました。これは、sys.partition_range_valuesで機能しない「境界のない」パーティションを許可するためです。
ここで重要なのは、sys.destination_data_spacesで、
これは正しい評価ですか?
SELECT PScheme = ps.name,
PFunction = pf.name,
Boundary = prv.boundary_id, -- Null for 'boundaryless'
BoundaryValue = prv.Value, -- Null for 'boundaryless'
[Filegroup] = fg.name
FROM sys.destination_data_spaces AS dds
INNER JOIN sys.filegroups AS fg
ON dds.data_space_id = fg.data_space_id
INNER JOIN sys.partition_schemes AS ps
ON dds.partition_scheme_id = ps.data_space_id
INNER JOIN sys.partition_functions AS pf
ON pf.function_id = ps.function_id
LEFT JOIN sys.partition_range_values AS prv
ON pf.function_id = prv.function_id AND
dds.destination_id = (prv.boundary_id + pf.boundary_value_on_right)