$PARTITION (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает номер секции, в который будет сопоставлен набор значений столбцов секционирования для любой указанной функции секционирования.
Соглашения о синтаксисе Transact-SQL
Синтаксис
[ database_name. ] $PARTITION.partition_function_name(expression)
Аргументы
database_name
Имя базы данных, которая содержит функцию секционирования.
partition_function_name
Имя существующей функции секционирования, которая применяется к набору значений столбцов секционирования.
выражение
Выражение, тип данных которого должен совпадать или иметь возможность неявного преобразования в тип данных соответствующего столбца секционирования. Аргумент expression также может быть именем столбца секционирования, который в настоящее время используется в 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
для возврата количества строк в каждой секции таблицы, содержащей данные.
Пример.
- Создает схему секционирования
RangePS1
для функции секционированияRangePF1
. - Создает таблицу
dbo.PartitionTable
в схеме секционированияRangePS1
со столбцом секционированияcol1
. - Вставляет четыре строки в таблицу
dbo.PartitionTable
. В зависимости от определения функции секционирования эти строки будут вставлены в секции 2 и 3. Секции 1 и 4 останутся пустыми. - Запрашивает
dbo.PartitionTable
и использует$PARTITION.RangePF1(col1)
в предложении GROUP BY для запроса количества строк в каждой секции, содержащей данные.
Примечание.
Чтобы выполнить этот пример, необходимо сначала создать функцию секционирования RangePF1
с помощью кода в предыдущем примере.
CREATE PARTITION SCHEME RangePS1
AS PARTITION RangePF1
ALL TO ('PRIMARY') ;
GO
CREATE TABLE dbo.PartitionTable (col1 int PRIMARY KEY, col2 char(10))
ON RangePS1 (col1) ;
GO
INSERT dbo.PartitionTable (col1, col2)
VALUES ((1,'a row'),(100,'another row'),(500,'another row'),(1000,'another row'))
SELECT
$PARTITION.RangePF1(col1) AS Partition,
COUNT(*) AS [COUNT]
FROM dbo.PartitionTable
GROUP BY $PARTITION.RangePF1(col1)
ORDER BY Partition ;
GO
Запрос SELECT
должен возвратить следующий результат:
Секция | COUNT |
---|---|
2 | 1 |
3 | 3 |
Строки не возвращаются для секций с номерами 1 и 4, которые существуют, но не содержат данных.
C. Получение всех строк из одной секции секционированной таблицы или индекса
Следующий пример иллюстрирует получение всех строк, которые содержит секция 3 таблицы PartitionTable
.
SELECT col1, col2
FROM dbo.PartitionTable
WHERE $PARTITION.RangePF1(col1) = 3 ;
Запрос должен возвратить следующий результат:
col1 | col2 |
---|---|
101 | another row |
500 | a third row |
501 | a fourth row |
Следующие шаги
Дополнительные сведения о секционировании таблиц см. в следующих статьях: