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


$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 с помощью кода в предыдущем примере.

  1. Создайте схему секционирования RangePS1для функции секционирования RangePF1.

    CREATE PARTITION SCHEME RangePS1
        AS PARTITION RangePF1
        ALL TO ('PRIMARY');
    GO
    
  2. Создайте таблицу dbo.PartitionTableв схеме секционирования RangePS1 с col1 в качестве столбца секционирования.

    CREATE TABLE dbo.PartitionTable
    (
        col1 INT PRIMARY KEY,
        col2 CHAR (20)
    ) ON RangePS1 (col1);
    GO
    
  3. Вставьте четыре строки в таблицу 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
    
  4. Запросите 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