Ако имате разделена таблица или индекс в SQL Server и искате да определите в кой дял ще бъде съпоставена дадена стойност, можете да направите това хубаво и бързо с $PARTITION
системна функция.
Всичко, което трябва да знаете, е името на функцията за дял (и разбира се, стойността, която ви интересува).
Пример
Ето пример за демонстрация.
SELECT $PARTITION.MoviesPartitionFunction(5);
Резултат:
+--------------------+ | (No column name) | |--------------------| | 2 | +--------------------+
В този случай стойността 5
ще влезе в дял номер 2.
Нека опитаме някои други стойности.
SELECT
$PARTITION.MoviesPartitionFunction(-100) AS [-100],
$PARTITION.MoviesPartitionFunction(100) AS [100],
$PARTITION.MoviesPartitionFunction(1000) AS [1000],
$PARTITION.MoviesPartitionFunction(100000) AS [100000];
Резултат:
+--------+-------+--------+----------+ | -100 | 100 | 1000 | 100000 | |--------+-------+--------+----------| | 1 | 2 | 3 | 4 | +--------+-------+--------+----------+
Запитвания за кръстосани бази данни
Можете също да добавите префикс към името на базата данни, за да направите заявка за друга база данни.
SELECT MovieDb.$PARTITION.MoviesPartitionFunction(5);
Преобразуване на тип данни
Типът данни на предоставената от вас стойност трябва или да съвпада, или да бъде имплицитно конвертируем в типа данни на съответната колона за разделяне.
Ако не, вероятно ще получите грешка 245.
SELECT $PARTITION.MoviesPartitionFunction('Hey!');
Резултат:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Hey!' to data type int.
Обърнете внимание, че $PARTITION
връща номера на дяла за всяка валидна стойност, независимо дали стойността в момента съществува в разделена таблица или индекс, който използва функцията за дял.