如何检查SQL Server中指定业务日期对应的表分区是否存在
检查指定分区边界是否存在的实现方案
你不需要额外关联分区表、索引视图,直接通过系统视图关联查询就能拿到分区函数下已配置的所有边界值,判断目标业务日期是否已经存在。
SQL Server中分区函数的所有已定义边界值都存储在sys.partition_range_values系统视图中,和你已经在用的sys.partition_functions视图通过function_id字段关联即可过滤指定分区函数的边界。
直接可用的判断脚本
-- 入参@bizDate 为你要检查的业务日期,例如20220616 -- 返回结果为1时代表该日期对应的分区边界已存在,为0时代表不存在,可以执行SPLIT操作 SELECT COUNT(1) AS is_exist FROM sys.partition_functions pf JOIN sys.partition_range_values prv ON pf.function_id = prv.function_id WHERE pf.name = 'BIZ_DATE_TRADE_PF' AND prv.value = @bizDate
注意事项
- 执行
ALTER PARTITION FUNCTION ... SPLIT RANGE时,如果传入的边界值已经在分区函数中定义,会直接抛出语法错误,你在Java逻辑中拿到上述查询的返回值,判断is_exist = 0时再执行ALTER语句即可。 - 传参时注意类型匹配:如果你的分区列是数值类型存储
20220616这类格式的日期,就按整数类型传参;如果是字符串类型存储,就按对应长度的字符串类型传参,避免隐式类型转换导致判断结果错误。
如果需要查看当前分区函数下所有已配置的边界,可使用以下查询:
SELECT prv.value AS biz_date_boundary FROM sys.partition_functions pf JOIN sys.partition_range_values prv ON pf.function_id = prv.function_id WHERE pf.name = 'BIZ_DATE_TRADE_PF' ORDER BY prv.value
内容的提问来源于stack exchange,提问作者M06H
相关产品推荐
相关产品推荐

