【问题标题】:Unable to get max partition number using partition function in SQL Server无法使用 SQL Server 中的分区函数获取最大分区数
【发布时间】:2019-08-27 08:48:12
【问题描述】:
SELECT 
    ISNULL(MAX($PARTITION.FacInterestFebosSumVolEod_201901_H_PFN(LoadstatusId)), 0) + 1 AS NextPartitionId
FROM  
    CIL.FacInterestFebosSumVolEod_201901_H;

此查询在生产环境中运行良好,并返回 21 作为输出。但是当我在测试环境中运行它时,它返回 1,即使这个分区函数存在值。

我们需要在表和分区函数之间创建任何链接吗?

下面是 test 中分区函数的 crate 语句。

CREATE PARTITION FUNCTION [FacInterestFebosSumVolEod_201901_H_PFN](BIGINT) 
AS RANGE LEFT FOR VALUES (1273497450, 1273498380, 1273498910)

上述查询的输出应该是 4。

【问题讨论】:

    标签: sql database function sql-server-2008 partitioning


    【解决方案1】:

    您的查询使用FacInterestFebosSumVolEod_201901_H 表中的LoadstatusId 来确定分区号,因此只有在指定分区的表中实际存在数据时才会返回最高分区函数边界。考虑查询sys.partition_range_values_functions 目录视图以确定函数的最大边界。

    SELECT TOP(1) prv.value
    FROM sys.partition_functions AS pf
    JOIN sys.partition_range_values AS prv ON prv.function_id = pf.function_id
    WHERE pf.name = N'FacInterestFebosSumVolEod_201901_H_PFN'
    ORDER BY prv.boundary_id DESC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2014-12-19
      • 2019-03-26
      • 2014-04-17
      相关资源
      最近更新 更多