Поделиться через


$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

Следующие шаги

Дополнительные сведения о секционировании таблиц см. в следующих статьях: