Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возвращает номер секции, в который можно сопоставить набор значений столбцов секционирования для любой указанной функции секционирования.
Соглашения о синтаксисе Transact-SQL
Синтаксис
[ database_name. ] $PARTITION.partition_function_name(expression)
Аргументы
database_name
Имя базы данных, содержащей функцию секционирования.
partition_function_name
Имя любой существующей функции секционирования, к которой применяется набор значений столбцов секционирования.
выражение
Выражение , тип данных которого должен совпадать или быть неявно преобразован в тип данных соответствующего столбца секционирования. Этот параметр также может быть именем столбца секционирования, который в настоящее время участвует в partition_function_name.
Типы возвращаемых данных
int
Замечания
$PARTITION возвращает значение int между 1 и числом секций функции секции.
$PARTITION возвращает номер секции для любого допустимого значения независимо от того, существует ли значение в секционированной таблице или индексе, использующим функцию секционирования.
Примеры
А. Получение номера секции для набора значений столбцов секционирования
Этот пример создает функцию секционирования RangePF1 с помощью RANGE LEFT для разделения таблицы или индекса на четыре секции.
$PARTITION используется для определения того, что значение 10, представляющее столбец секционирования RangePF1, будет помещено в раздел 1 таблицы.
CREATE PARTITION FUNCTION RangePF1(INT)
AS RANGE LEFT
FOR VALUES (10, 100, 1000);
GO
SELECT $PARTITION.RangePF1 (10);
GO
B. Получение количества строк в каждой непустой секции секционированной таблицы или представления
В этом примере показано, как использовать $PARTITION для возврата количества строк в каждой секции таблицы, содержащей данные.
Примечание.
Чтобы выполнить этот пример, необходимо сначала создать функцию секционирования RangePF1 с помощью кода в предыдущем примере.
Создайте схему секционирования
RangePS1для функции секционированияRangePF1.CREATE PARTITION SCHEME RangePS1 AS PARTITION RangePF1 ALL TO ('PRIMARY'); GOСоздайте таблицу
dbo.PartitionTableв схеме секционированияRangePS1сcol1в качестве столбца секционирования.CREATE TABLE dbo.PartitionTable ( col1 INT PRIMARY KEY, col2 CHAR (20) ) ON RangePS1 (col1); GOВставьте четыре строки в таблицу
dbo.PartitionTable. Эти строки вставляются в секции на основе определения функции секцииRangePF1:1и10перейти к разделу1, а500и1000перейти к3.INSERT dbo.PartitionTable (col1, col2) VALUES (1, 'a row'), (10, 'another row'), (500, 'another row'), (1000, 'another row'); GOЗапросите
dbo.PartitionTableи использует$PARTITION.RangePF1(col1)в предложенииGROUP BYдля запроса количества строк в каждой секции, содержащей данные.SELECT $PARTITION.RangePF1 (col1) AS Partition, COUNT(*) AS [COUNT] FROM dbo.PartitionTable GROUP BY $PARTITION.RangePF1 (col1) ORDER BY Partition; GO
Вот результирующий набор.
| Секция | COUNT |
|---|---|
| 1 | 2 |
| 3 | 2 |
Строки не возвращаются для номера секции 2, который существует, но не содержит данные.
В. Получение всех строк из одной секции секционированной таблицы или индекса
Следующий пример иллюстрирует получение всех строк, которые содержит секция 3 таблицы PartitionTable.
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1 (col1) = 3;
Вот результирующий набор.
| col1 | col2 |
|---|---|
500 |
Ещё один ряд |
1000 |
Ещё один ряд |