CREATE PARTITION FUNCTION (Transact-SQL)

Изменения: 17 июля 2006 г.

Создает функцию в текущей базе данных, которая сопоставляет строки таблицы или индекса с секциями, основываясь на значениях элементов заданного столбца. Инструкция CREATE PARTITION FUNCTION используется на начальной стадии создания секционированной таблицы или индекса.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ] 
FOR VALUES ( [ boundary_value [ ,...n ] ] ) 
[ ; ]

Аргументы

  • partition_function_name
    Имя функции секционирования. Имена функций секционирования должны быть уникальными внутри базы данных и соответствовать правилам для идентификаторов.
  • input_parameter_type
    Тип данных столбца, используемого для секционирования. В качестве столбцов секционирования могут использоваться данные любого типа, кроме text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), типов данных-псевдонимов, а также определяемых пользователем типов данных CLR.

    Столбец секционирования задается с помощью инструкции CREATE TABLE или CREATE INDEX.

  • boundary_value
    Задает граничные значения для каждой секции секционированной таблицы или индекса, в которой используется аргумент partition_function_name. Если параметр boundary_value не задан, функция секционирования сопоставляет всю таблицу или индекс одной секции, используя аргумент partition_function_name. Может использоваться только один столбец секционирования, заданный с помощью инструкции CREATE TABLE или CREATE INDEX.

    Аргумент boundary_value является постоянным выражением, которое может обращаться к переменным. К ним относятся переменные типов данных, определяемых пользователем, а также стандартные и пользовательские функции. Указанный аргумент не может ссылаться на выражения Transact-SQL. Тип данных аргумента boundary_value должен либо соответствовать типу данных аргумента input_parameter_type, либо неявно в него преобразовываться; кроме того, данные параметра не могут быть усечены во время неявного преобразования типов данных, если размер и масштаб значения не соответствует типу данных аргумента input_parameter_type.

    ms187802.note(ru-ru,SQL.90).gifПримечание.
    Если аргумент boundary_value содержит литералы datetime или smalldatetime, то они оцениваются, предполагая, что языком сеанса является us_english. Такое поведение является устаревшим. Чтобы убедиться, что определение функции секционирования работает правильно для всех языков сеанса, рекомендуется использование констант, интерпретируемых одинаково для всех языковых настроек, таких как формат «ггггммдд», либо выполнить явное преобразование литералов в определенный стиль. Дополнительные сведения см. в разделе Написание интернационализированных инструкций на языке Transact-SQL. Чтобы определить язык сеанса вашего сервера, выполните SELECT @@LANGUAGE.
  • ...n
    Задает до 999 значений, указанных в аргументе boundary_value. Количество созданных секций равно n + 1. Значения могут отображаться не по порядку. Если значения выведены не по порядку, то компонент Microsoft SQL Server 2005 Database Engine проводит их сортировку, создает функцию и выдает предупреждение о том, что значения выданы не по порядку. В случае наличия в параметре n повторяющихся значений компонент Database Engine выдает ошибку.
  • LEFT | RIGHT
    Указывает, к какой области интервала значений принадлежит аргумент boundary_value [ ,...n ] (к левой или правой) для случая, когда значения интервалов были отсортированы компонентом Database Engine по возрастанию слева направо. Если значение аргумента не указано, то по умолчанию принимается LEFT (левый). Дополнительные сведения см. в разделе Примеры.

Замечания

Функции секционирования могут применяться только внутри базы данных, в которой они были созданы. Функции секционирования располагаются в отдельном от других функций пространстве имен внутри базы данных.

Все строки, которым соответствуют значения NULL столбца секционирования, располагаются в самой левой секции, кроме случая, когда задано пустое граничное значение и параметр RIGHT. В данном случае самая левая секция является пустой, и в нее помещаются значения NULL.

Разрешения

Для выполнения инструкции CREATE PARTITION FUNCTION необходимо наличие одного из следующих разрешений.

  • Разрешение ALTER ANY DATASPACE. Данное разрешение, по умолчанию, предоставляется членам фиксированной серверной роли sysadmin и фиксированных ролей базы данных db_owner и db_ddladmin.
  • Разрешение CONTROL или ALTER для базы данных, в которой создается функция секционирования.
  • Разрешение CONTROL SERVER или ALTER ANY DATABASE для сервера базы данных, в которой создается функция секционирования.

Примеры

А. Создание функции секционирования RANGE LEFT для столбца данных типа int

Следующая функция секционирования разбивает таблицу или индекс на четыре секции.

CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);

В следующей таблице показано, как будет разбита таблица, использующая эту функцию секционирования для столбца секционирования col1.

Секция 1 2 3 4

Значения

col1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <= 1000

col1 > 1000

Б. Создание функции секционирования RANGE RIGHT для столбца данных типа int

В следующей функции секционирования используются те же значения параметров boundary_value [ ,...n ], что и в предыдущем примере. Единственное различие — в данном случае задается RANGE RIGHT.

CREATE PARTITION FUNCTION myRangePF2 (int)
AS RANGE RIGHT FOR VALUES (1, 100, 1000);

В следующей таблице показано, как будет разбита таблица, использующая эту функцию секционирования для столбца секционирования col1.

Секция 1 2 3 4

Значения

col1 < 1

col1 >= 1 AND col1 < 100

col1 >= 100 AND col1 < 1000

col1 >= 1000

В. Создание функции секционирования RANGE RIGHT для столбца данных типа datetime

Следующая функция секционирования разбивает таблицу или индекс на 12 секций, по одной на каждый месяц года со значениями в столбце типа datetime.

CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',
               '20030501', '20030601', '20030701', '20030801', 
               '20030901', '20031001', '20031101', '20031201');

В следующей таблице показано, как будет разбита таблица или индекс, использующие эту функцию секционирования для столбца секционирования datecol.

Секция 1 2 ... 11 12

Значения

datecol < February 1, 2003

datecol >= February 1, 2003 AND datecol < March 1, 2003

datecol >= November 1, 2003 AND col1 < December 1, 2003

col1 >= December 1, 2003

Г. Создание функции секционирования для столбца данных типа char

Следующая функция секционирования разбивает таблицу или индекс на четыре секции.

CREATE PARTITION FUNCTION myRangePF3 (char(20))
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');

В следующей таблице показано, как будет разбита таблица, использующая эту функцию секционирования для столбца секционирования col1.

Секция 1 2 3 4

Значения

col1 < EX...

col1 >= EX AND col1 < RXE...

col1 >= RXE AND col1 < XR...

col1 >= XR

См. также

Справочник

$PARTITION (Transact-SQL)
ALTER PARTITION FUNCTION (Transact-SQL)
DROP PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL)
CREATE TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.partition_functions (Transact-SQL)
sys.partition_parameters (Transact-SQL)
sys.partition_range_values (Transact-SQL)
sys.partitions (Transact-SQL)
sys.tables (Transact-SQL)
sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 июля 2006 г.

Новое содержимое
  • Добавлено примечание в аргумент boundary_value для разъяснения, что литералы datetime или smalldatetime оцениваются, предполагая, что языком сеанса является us_english.
  • Добавлен пример В, показывающий создание функции секционирования для столбца datetime.