无法在 SQL 服务器中使用分区函数获取最大分区数
Unable to get max partition number using partition function in SQL Server
SELECT
ISNULL(MAX($PARTITION.FacInterestFebosSumVolEod_201901_H_PFN(LoadstatusId)), 0) + 1 AS NextPartitionId
FROM
CIL.FacInterestFebosSumVolEod_201901_H;
此查询在生产环境中运行良好,并返回 21 作为输出。但是当我在测试环境中 运行 它时,它返回 1,即使这个分区函数存在值。
在table和分区函数之间是否需要创建link?
下面是测试中分区函数的 crate 语句。
CREATE PARTITION FUNCTION [FacInterestFebosSumVolEod_201901_H_PFN](BIGINT)
AS RANGE LEFT FOR VALUES (1273497450, 1273498380, 1273498910)
上面查询的输出应该是4。
您的查询使用 FacInterestFebosSumVolEod_201901_H
table 中的 LoadstatusId
来确定分区号,因此仅当 [=16] 中实际存在数据时才会返回最高分区函数边界=] 指定分区。考虑查询 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;
SELECT
ISNULL(MAX($PARTITION.FacInterestFebosSumVolEod_201901_H_PFN(LoadstatusId)), 0) + 1 AS NextPartitionId
FROM
CIL.FacInterestFebosSumVolEod_201901_H;
此查询在生产环境中运行良好,并返回 21 作为输出。但是当我在测试环境中 运行 它时,它返回 1,即使这个分区函数存在值。
在table和分区函数之间是否需要创建link?
下面是测试中分区函数的 crate 语句。
CREATE PARTITION FUNCTION [FacInterestFebosSumVolEod_201901_H_PFN](BIGINT)
AS RANGE LEFT FOR VALUES (1273497450, 1273498380, 1273498910)
上面查询的输出应该是4。
您的查询使用 FacInterestFebosSumVolEod_201901_H
table 中的 LoadstatusId
来确定分区号,因此仅当 [=16] 中实际存在数据时才会返回最高分区函数边界=] 指定分区。考虑查询 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;