SQL 获取分区边界和文件组

Pau*_*mes 2 sql-server query metadata partitioning sql-server-2012

对于给定的分区方案名称,我需要检索一组

  • 边界值
  • 文件组名称

必须在不存在参与该方案的任何表的情况下起作用。

通过 sys.indexes 加入将不起作用。

认为答案在于 sys.destination_data_spaces,但尚未弄清楚与 sys.partition_range_values 的连接。

Aar*_*and 5

这种关系并不完全直观,但我认为这个查询可以满足您的需求:

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)

您不需要创建任何表。