在当前数据库中创建一个函数,该函数可根据指定列的值将表或索引的各行映射到分区。使用 CREATE PARTITION FUNCTION 是创建已分区表或索引的第一步。
- 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 是会话语言。不推荐使用此行为。要确保分区函数定义对于所有会话语言都具有预期的行为,建议使用对于所有语言设置都以相同方式进行解释的常量,例如 yyyymmdd 格式;或者将文字值显式转换为特定样式。有关详细信息,请参阅 编写国际化 Transact-SQL 语句。若要确定服务器的语言会话,请运行 SELECT @@LANGUAGE
。
- ...n
-
指定 boundary_value 提供的值的数目,不能超过 999。所创建的分区数等于 n + 1。不必按顺序列出各值。如果值未按顺序列出,则数据库引擎将对它们进行排序、创建函数并返回一个警告,说明未按顺序提供值。如果 n 包括任何重复的值,则数据库引擎将返回错误。
- LEFT | RIGHT
-
指定当间隔值由 数据库引擎 按升序从左到右排序时,boundary_value [ ,...n ] 属于每个边界值间隔的哪一侧(左侧还是右侧)。如果未指定,则默认值为 LEFT。有关详细信息,请参阅示例。
A. 对 int 列创建 RANGE LEFT 分区函数
以下分区函数将表或索引分为四个分区。
CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES (1, 100, 1000);
下表显示对分区依据列 col1 使用此分区函数的表如何进行分区。
分区 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
值 |
col1 <= |
col1 > |
col1 > |
col1 > |
B. 对 int 列创建 RANGE RIGHT 分区函数
以下分区函数与上一个示例使用相同的 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 < |
col1 >= |
col1 >= |
col1 >= |
C. 对 datetime 列创建 RANGE RIGHT 分区函数
以下分区函数将表或索引分成 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 < |
datecol >= |
|
datecol >= |
col1 >= |
D. Creating a partition function on a char column
以下分区函数将表或索引分为四个分区。
CREATE PARTITION FUNCTION myRangePF3 (char(20)) AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');
下表显示对分区依据列 col1 使用此分区函数的表如何进行分区。
分区 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
值 |
col1 < |
col1 >= |
col1 >= |
col1 >= |