Невозможно получить максимальный номер раздела с помощью функции раздела в SQL Server - PullRequest
0 голосов
/ 05 апреля 2019
SELECT 
    ISNULL(MAX($PARTITION.FacInterestFebosSumVolEod_201901_H_PFN(LoadstatusId)), 0) + 1 AS NextPartitionId
FROM  
    CIL.FacInterestFebosSumVolEod_201901_H;

Этот запрос прекрасно работает в производственной среде и возвращает 21 в качестве результата. Но когда я запускаю его в тестовой среде, он возвращает 1, хотя для этой функции секционирования существуют значения.

Есть ли какая-то связь, которую нам нужно создать между таблицей и функцией секционирования?

Ниже приведен оператор crate для функции разделения, присутствующей в тесте.

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

Результат запроса выше 4.

1 Ответ

0 голосов
/ 05 апреля 2019

Ваш запрос использует LoadstatusId из таблицы FacInterestFebosSumVolEod_201901_H для определения номера раздела, поэтому наивысшая граница функции раздела будет возвращена только в том случае, если данные фактически существуют в таблице для указанного раздела.Попробуйте определить каталог по каталогу 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;
...