Sql-Server

SQL 獲取分區邊界和文件組

  • October 26, 2018

對於給定的分區方案名稱,我需要檢索一組

  • 邊界值
  • 文件組名稱

必須在不存在參與該方案的任何表的情況下工作。

通過 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對我來說總是一個乏味的腦力練習,所以你可能需要翻轉boundary_value_on_right倒數第二行的部分:

ON dds.destination_id = prv.boundary_id + ABS(1-pf.boundary_value_on_right)  

您不需要創建任何表。

引用自:https://dba.stackexchange.com/questions/220987