$PARTITION (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает номер секции, в который можно сопоставить набор значений столбцов секционирования для любой указанной функции секционирования.
Соглашения о синтаксисе 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 |
another row |
1000 |
another row |