CREATE PARTITION FUNCTION (Transact-SQL)
Создает функцию в текущей базе данных, которая сопоставляет строки таблицы или индекса с секциями, основываясь на значениях элементов заданного столбца. Инструкция CREATE PARTITION FUNCTION используется на начальной стадии создания секционированной таблицы или индекса.
Синтаксис
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.
Примечание
Если аргумент boundary_value содержит литералы datetime или smalldatetime, то они оцениваются, предполагая, что языком сеанса является us_english. Такое поведение является устаревшим. Чтобы убедиться, что определение функции секционирования работает правильно для всех языков сеанса, рекомендуется использование констант, интерпретируемых одинаково для всех языковых настроек, таких как формат «ггггммдд», либо выполнить явное преобразование литералов в определенный стиль. Дополнительные сведения см. в разделе Написание инструкций на языке Transact-SQL, адаптированных к международному использованию. Чтобы определить язык сеанса сервера, выполните SELECT @@LANGUAGE.
...n
Задает до 999 значений, указанных в аргументе boundary_value. Количество созданных секций равно n + 1. Значения могут отображаться не по порядку. Если значения выведены не по порядку, компонент 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 |
---|---|---|---|---|
Values |
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 |
---|---|---|---|---|
Values |
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 |
---|---|---|---|---|---|
Values |
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 |
---|---|---|---|---|
Values |
col1 < EX... |
col1 >= EX AND col1 < RXE... |
col1 >= RXE AND col1 < XR... |
col1 >= XR |
См. также