CREATE PARTITION FUNCTION(Transact-SQL)CREATE PARTITION FUNCTION (Transact-SQL)

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

현재 데이터베이스에서 지정된 열 값에 기반하여 테이블 또는 인덱스의 행을 파티션에 매핑하는 함수를 만듭니다.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. 분할된 테이블 또는 인덱스를 만드는 첫 번째 단계는 CREATE PARTITION FUNCTION을 사용하는 것입니다.Using CREATE PARTITION FUNCTION is the first step in creating a partitioned table or index. SQL Server 2017SQL Server 2017에서는 테이블이나 인덱스 하나에 파티션을 최대 15,000개까지 포함할 수 있습니다.In SQL Server 2017SQL Server 2017, a table or index can have a maximum of 15,000 partitions.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

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

인수Arguments

partition_function_namepartition_function_name
파티션 함수의 이름입니다.Is the name of the partition function. 파티션 함수의 이름은 데이터베이스 내에서 고유해야 하며 식별자에 대한 규칙을 따라야 합니다.Partition function names must be unique within the database and comply with the rules for identifiers.

input_parameter_typeinput_parameter_type
분할에 사용되는 열의 데이터 형식입니다.Is the data type of the column used for partitioning. text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), 별칭 데이터 형식 또는 CLR 사용자 정의 데이터 형식을 제외한 모든 데이터 형식은 분할 열로 사용할 수 있습니다.All data types are valid for use as partitioning columns, except text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), alias data types, or CLR user-defined data types.

분할 열이라고 하는 실제 열은 CREATE TABLE 또는 CREATE INDEX 문에 지정됩니다.The actual column, known as a partitioning column, is specified in the CREATE TABLE or CREATE INDEX statement.

boundary_valueboundary_value
partition_function_name을 사용하는 분할된 테이블 또는 인덱스의 각 파티션에 대한 경계값을 지정합니다.Specifies the boundary values for each partition of a partitioned table or index that uses partition_function_name. boundary_value가 비어 있는 경우 파티션 함수는 partition_function_name을 사용하여 전체 테이블이나 인덱스를 단일 파티션에 매핑합니다.If boundary_value is empty, the partition function maps the whole table or index using partition_function_name into a single partition. CREATE TABLE 또는 CREATE INDEX 문에 지정된 하나의 분할 열만 사용할 수 있습니다.Only one partitioning column, specified in a CREATE TABLE or CREATE INDEX statement, can be used.

boundary_value는 변수를 참조할 수 있는 상수 식입니다.boundary_value is a constant expression that can reference variables. 여기에는 사용자 정의 형식 변수나 함수 및 사용자 정의 함수가 포함됩니다.This includes user-defined type variables, or functions and user-defined functions. Transact-SQLTransact-SQL 식은 참조할 수 없습니다.It cannot reference Transact-SQLTransact-SQL expressions. boundary_valueinput_parameter_type에 제공된 데이터 형식과 일치하거나 해당 데이터 형식으로 암시적으로 변환할 수 있어야 하며 암시적인 변환 중에 값의 크기 및 소수 자릿수가 해당 input_parameter_type과 일치하지 않는 방식으로 잘려서는 안 됩니다.boundary_value must either match or be implicitly convertible to the data type supplied in input_parameter_type, and cannot be truncated during implicit conversion in a way that the size and scale of the value does not match that of its corresponding input_parameter_type.

참고

boundary_valuedatetime 또는 smalldatetime 리터럴로 구성된 경우 이러한 리터럴은 us_english가 세션 언어인 것으로 가정하여 처리됩니다.If boundary_value consists of datetime or smalldatetime literals, these literals are evaluated assuming that us_english is the session language. 이 기능은 더 이상 지원되지 않습니다.This behavior is deprecated. 파티션 함수 정의가 모든 세션 언어에 대해 예상대로 작동하도록 하려면 yyyymmdd 형식과 같이 모든 언어 설정에 대해 동일한 방식으로 해석되는 상수를 사용하거나 리터럴을 특정 스타일로 명시적으로 변환하는 것이 좋습니다.To make sure the partition function definition behaves as expected for all session languages, we recommend that you use constants that are interpreted the same way for all language settings, such as the yyyymmdd format; or explicitly convert literals to a specific style. 서버의 언어 세션을 결정하려면 SELECT @@LANGUAGE를 실행합니다.To determine the language session of your server, run SELECT @@LANGUAGE.

...n...n
boundary_value에 제공된 값 개수가 14,999개를 초과하지 않도록 지정합니다.Specifies the number of values supplied by boundary_value, not to exceed 14,999. 생성되는 파티션 수는 n + 1개입니다.The number of partitions created is equal to n + 1. 값은 순서대로 나열되지 않아도 됩니다.The values do not have to be listed in order. 값이 순서대로 나열되지 않은 경우 데이터베이스 엔진Database Engine에서 값을 정렬하여 함수를 만들고 값이 순서대로 제공되지 않았다는 경고를 반환합니다.If the values are not in order, the 데이터베이스 엔진Database Engine sorts them, creates the function, and returns a warning that the values are not provided in order. n에 중복 값이 있는 경우 데이터베이스 엔진에서 오류를 반환합니다.The Database Engine returns an error if n includes any duplicate values.

LEFT | RIGHTLEFT | RIGHT
데이터베이스 엔진Database Engine에서 간격 값을 왼쪽에서 오른쪽으로 오름차순으로 정렬할 때 boundary_value [ ,...n ]이 각 경계 값 간격의 왼쪽과 오른쪽 중 어느 쪽에 속하는지 지정합니다.Specifies to which side of each boundary value interval, left or right, the boundary_value [ ,...n ] belongs, when interval values are sorted by the 데이터베이스 엔진Database Engine in ascending order from left to right. 지정하지 않은 경우 LEFT가 기본값입니다.If not specified, LEFT is the default.

RemarksRemarks

파티션 함수의 범위는 함수가 생성된 데이터베이스로 제한됩니다.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.

해당 분할 열에 Null 값이 있는 모든 행은 맨 왼쪽 파티션에 위치합니다. 단, NULL이 경계 값으로 지정되고 RIGHT가 지정된 경우에는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. 맨 왼쪽 파티션은 빈 파티션이 되고 NULL 값은 다음 파티션에 위치하게 됩니다.In this case, the left-most partition is an empty partition, and NULL values are placed in the following partition.

사용 권한Permissions

다음 사용 권한 중 하나를 사용하여 CREATE PARTITION FUNCTION을 실행할 수 있습니다.Any one of the following permissions can be used to execute CREATE PARTITION FUNCTION:

  • ALTER ANY DATASPACE 권한.ALTER ANY DATASPACE permission. 이 권한은 기본적으로 sysadmin 고정 서버 역할 및 db_ownerdb_ddladmin 고정 데이터베이스 역할의 멤버에게 부여됩니다.This permission defaults to members of the sysadmin fixed server role and the db_owner and db_ddladmin fixed database roles.

  • 파티션 함수가 생성된 데이터베이스에 대한 CONTROL 또는 ALTER 권한CONTROL or ALTER permission on the database in which the partition function is being created.

  • 파티션 함수가 생성된 데이터베이스의 서버에 대한 CONTROL SERVER 또는 ALTER ANY DATABASE 권한CONTROL SERVER or ALTER ANY DATABASE permission on the server of the database in which the partition function is being created.

Examples

1.A. int 열에 RANGE LEFT 파티션 함수 만들기Creating a RANGE LEFT partition function on an int column

다음 파티션 함수는 테이블이나 인덱스를 4개의 파티션으로 분할합니다.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);  

다음 표에서는 분할 열 col1에 대해 이 파티션 함수를 사용하는 테이블이 분할되는 방식을 보여 줍니다.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
Values col1 <= 1col1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <=1000col1 > 100 AND col1 <=1000 col1 > 1000col1 > 1000

2.B. int 열에 RANGE RIGHT 파티션 함수 만들기Creating a RANGE RIGHT partition function on an int column

다음 파티션 함수는 RANGE RIGHT를 지정한다는 점을 제외하고 boundary_value [ ,...n ]에 위 예와 동일한 값을 사용합니다.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);  

다음 표에서는 분할 열 col1에 대해 이 파티션 함수를 사용하는 테이블이 분할되는 방식을 보여 줍니다.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
Values col1 < 1col1 < 1 col1 >= 1 AND col1 < 100col1 >= 1 AND col1 < 100 col1 >= 100 AND col1 < 1000col1 >= 100 AND col1 < 1000 col1 >= 1000col1 >= 1000

3.C. datetime 열에 RANGE RIGHT 파티션 함수 만들기Creating a RANGE RIGHT partition function on a datetime column

다음 파티션 함수는 테이블이나 인덱스를 12개 파티션으로 분할합니다. 즉, 일년의 값을 분할하여 datetime 열에 각 달에 대한 하나의 파티션을 만듭니다.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');  

다음 표에서는 분할 열 datecol에 대해 이 파티션 함수를 사용하는 테이블 또는 인덱스가 분할되는 방식을 보여줍니다.The following table shows how a table or index that uses this partition function on partitioning column datecol would be partitioned.

PartitionPartition 11 22 ...... 1111 1212
Values datecol < February 1, 2003datecol < February 1, 2003 datecol >= February 1, 2003 AND datecol < March 1, 2003datecol >= February 1, 2003 AND datecol < March 1, 2003 datecol >= November 1, 2003 AND col1 < December 1, 2003datecol >= November 1, 2003 AND col1 < December 1, 2003 datecol >= December 1, 2003datecol >= December 1, 2003

4.D. char 열에 파티션 함수 만들기Creating a partition function on a char column

다음 파티션 함수는 테이블이나 인덱스를 4개의 파티션으로 분할합니다.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');  

다음 표에서는 분할 열 col1에 대해 이 파티션 함수를 사용하는 테이블이 분할되는 방식을 보여 줍니다.The following table shows how a table that uses this partition function on partitioning column col1 would be partitioned.

PartitionPartition 11 22 33 44
Values col1 < EX...col1 < EX... col1 >= EX AND col1 < RXE...col1 >= EX AND col1 < RXE... col1 >= RXE AND col1 < XR...col1 >= RXE AND col1 < XR... col1 >= XRcol1 >= XR

5.E. 15,000개의 파티션 만들기Creating 15,000 partitions

다음 파티션 함수는 테이블이나 인덱스를 15,000개의 파티션으로 분할합니다.The following partition function partitions a table or index into 15,000 partitions.

--Create integer partition function for 15,000 partitions.  
DECLARE @IntegerPartitionFunction nvarchar(max) = 
    N'CREATE PARTITION FUNCTION IntegerPartitionFunction (int) 
    AS RANGE RIGHT FOR VALUES (';  
DECLARE @i int = 1;  
WHILE @i < 14999  
BEGIN  
SET @IntegerPartitionFunction += CAST(@i as nvarchar(10)) + N', ';  
SET @i += 1;  
END  
SET @IntegerPartitionFunction += CAST(@i as nvarchar(10)) + N');';  
EXEC sp_executesql @IntegerPartitionFunction;  
GO  

6.F. 여러 연도에 대한 파티션 만들기Creating partitions for multiple years

다음 파티션 함수는 테이블이나 인덱스를 datetime2 열에 50개의 파티션으로 분할합니다.The following partition function partitions a table or index into 50 partitions on a datetime2 column. 2007년 1월에서 2011년 1월 사이의 각 월마다 하나의 파티션이 있습니다.There is one partitions for each month between January 2007 and January 2011.

--Create date partition function with increment by month.  
DECLARE @DatePartitionFunction nvarchar(max) = 
    N'CREATE PARTITION FUNCTION DatePartitionFunction (datetime2) 
    AS RANGE RIGHT FOR VALUES (';  
DECLARE @i datetime2 = '20070101';  
WHILE @i < '20110101'  
BEGIN  
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10)) + '''' + N', ';  
SET @i = DATEADD(MM, 1, @i);  
END  
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10))+ '''' + N');';  
EXEC sp_executesql @DatePartitionFunction;  
GO  

참고 항목See Also

분할된 테이블 및 인덱스 Partitioned Tables and Indexes
$PARTITION(Transact-SQL) $PARTITION (Transact-SQL)
ALTER PARTITION FUNCTION(Transact-SQL) ALTER PARTITION FUNCTION (Transact-SQL)
DROP PARTITION FUNCTION(Transact-SQL) DROP PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME(Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE TABLE(Transact-SQL) CREATE TABLE (Transact-SQL)
CREATE INDEX(Transact-SQL) CREATE INDEX (Transact-SQL)
ALTER INDEX(Transact-SQL) ALTER INDEX (Transact-SQL)
EVENTDATA(Transact-SQL) EVENTDATA (Transact-SQL)
sys.partition_functions(Transact-SQL) sys.partition_functions (Transact-SQL)
sys.partition_parameters(Transact-SQL) sys.partition_parameters (Transact-SQL)
sys.partition_range_values(Transact-SQL) sys.partition_range_values (Transact-SQL)
sys.partitions(Transact-SQL) sys.partitions (Transact-SQL)
sys.tables(Transact-SQL) sys.tables (Transact-SQL)
sys.indexes(Transact-SQL) sys.indexes (Transact-SQL)
sys.index_columns(Transact-SQL)sys.index_columns (Transact-SQL)