$PARTITION (Transact-SQL)
Возвращает номер секции, с которой будет сопоставлен набор значений столбцов секционирования для любой указанной функции секционирования.
Синтаксис
[ database_name. ] $PARTITION.partition_function_name(expression)
Аргументы
database_name
Имя базы данных, которая содержит функцию секционирования.partition_function_name
Имя существующей функции секционирования, которая применяется к набору значений столбцов секционирования.expression
Аргумент expression, тип данных которого должен совпадать или иметь возможность неявного преобразования к типу данных соответствующего столбца секционирования. Аргумент expression является также именем столбца секционирования, который передается в функцию partition_function_name.
Типы возвращаемых данных
int
Замечания
$PARTITION возвращает значение типа int между 1 и числом секций функции секционирования.
$PARTITION возвращает номер секции для любого допустимого значения вне зависимости от того, существует ли данное значение в секционированной таблице или индексе, который пользуется функцией секционирования.
Примеры
A. Получение номера секции для набора значений столбцов секционирования
Следующий пример создает функцию секционирования RangePF1 для разделения таблицы или индекса на четыре секции. $PARTITION используется для определения того, что значение 10, представляющее столбец секционирования RangePF1, попадет в секцию 1 таблицы.
USE AdventureWorks2008R2 ;
GO
CREATE PARTITION FUNCTION RangePF1 ( int )
AS RANGE FOR VALUES (10, 100, 1000) ;
GO
SELECT $PARTITION.RangePF1 (10) ;
GO
Б. Получение количества строк в каждой непустой секции секционированной таблицы или представления
Следующий пример иллюстрирует получение числа строк в каждой секции таблицы TransactionHistory, которая содержит данные. Таблица TransactionHistory использует функцию секционирования TransactionRangePF1, которая разбивает ее по столбцу TransactionDate.
Примечание |
---|
Для выполнения этого примера требуется запустить сценарий PartitionAW.sql для образца базы данных База данных AdventureWorks2008R2. Дополнительные сведения см. в разделе Вопросы установки образцов кода и образцов баз данных SQL Server. |
USE AdventureWorks2008R2 ;
GO
SELECT $PARTITION.TransactionRangePF1(TransactionDate) AS Partition,
COUNT(*) AS [COUNT] FROM Production.TransactionHistory
GROUP BY $PARTITION.TransactionRangePF1(TransactionDate)
ORDER BY Partition ;
GO
В. Получение всех строк из одной секции секционированной таблицы или индекса
Следующий пример иллюстрирует получение всех строк, которые содержит секция 5 таблицы TransactionHistory.
Примечание |
---|
Для выполнения этого примера требуется запустить сценарий PartitionAW.sql для образца базы данных База данных AdventureWorks2008R2. Дополнительные сведения см. в разделе Вопросы установки образцов кода и образцов баз данных SQL Server. |
SELECT * FROM Production.TransactionHistory
WHERE $PARTITION.TransactionRangePF1(TransactionDate) = 5 ;