CREATE PARTITION FUNCTION (Transact-SQL)
Creates a function in the current database that maps the rows of a table or index into partitions based on the values of a specified column. Using CREATE PARTITION FUNCTION is the first step in creating a partitioned table or index.
The scope of a partition function is limited to the database that it is created in. Within the database, partition functions reside in a separate namespace from the other functions.
Any rows whose partitioning column has null values are placed in the left-most partition, unless NULL is specified as a boundary value and RIGHT is indicated. In this case, the left-most partition is an empty partition, and NULL values are placed in the following partition.
Any one of the following permissions can be used to execute CREATE PARTITION FUNCTION:
ALTER ANY DATASPACE permission. This permission defaults to members of the sysadmin fixed server role and the db_owner and db_ddladmin fixed database roles.
CONTROL or ALTER permission on the database in which the partition function is being created.
CONTROL SERVER or ALTER ANY DATABASE permission on the server of the database in which the partition function is being created.
A. Creating a RANGE LEFT partition function on an int column
The following partition function will partition a table or index into four partitions.
CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES (1, 100, 1000);
The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.
Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
Values | col1 <= 1 | col1 > 1 AND col1 <= 100 | col1 > 100 AND col1 <=1000 | col1 > 1000 |
B. Creating a RANGE RIGHT partition function on an int column
The following partition function uses the same values for boundary_value [ ,...n ] as the previous example, except it specifies RANGE RIGHT.
CREATE PARTITION FUNCTION myRangePF2 (int) AS RANGE RIGHT FOR VALUES (1, 100, 1000);
The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.
Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
Values | col1 < 1 | col1 >= 1 AND col1 < 100 | col1 >= 100 AND col1 < 1000 | col1 >= 1000 |
C. Creating a RANGE RIGHT partition function on a datetime column
The following partition function partitions a table or index into 12 partitions, one for each month of a year's worth of values in a datetime column.
CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',
'20030501', '20030601', '20030701', '20030801',
'20030901', '20031001', '20031101', '20031201');
The following table shows how a table or index that uses this partition function on partitioning column datecol would be partitioned.
Partition | 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 |
D. Creating a partition function on a char column
The following partition function partitions a table or index into four partitions.
CREATE PARTITION FUNCTION myRangePF3 (char(20))
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');
The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.
Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
Values | col1 < EX... | col1 >= EX AND col1 < RXE... | col1 >= RXE AND col1 < XR... | col1 >= XR |
