Pau*_*mes 2 sql-server query metadata partitioning sql-server-2012
对于给定的分区方案名称,我需要检索一组
这必须在不存在参与该方案的任何表的情况下起作用。
即通过 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;
Run Code Online (Sandbox Code Playgroud)
因为LEFT/RIGHT对我来说始终是一项乏味的脑力练习,所以您可能需要翻转倒数boundary_value_on_right第二行的部分:
ON dds.destination_id = prv.boundary_id + ABS(1-pf.boundary_value_on_right)
Run Code Online (Sandbox Code Playgroud)
您不需要创建任何表。