SQL Server-- CREATE PARTITION FUNCTION

CREATE PARTITION FUNCTION (Transact-SQL)


在當前數據庫中創建一個函數,該函數可根據指定列的值將表或索引的各行映射到分區。使用 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 中相應的值的大小和小數位數不匹配,則在隱式轉換過程中該值不能被截斷。注意:
如果 boundary_value 包含 datetime 或 smalldatetime 文字值,則爲這些文字值在計算時假設 us_english 是會話語言。不推薦使用此行爲。要確保分區函數定義對於所有會話語言都具有預期的行爲,建議使用對於所有語言設置都以相同方式進行解釋的常量,例如 yyyymmdd 格式;或者將文字值顯式轉換爲特定樣式。有關詳細信息,請參閱 編寫國際化 Transact-SQL 語句。若要確定服務器的語言會話,請運行 SELECT @@LANGUAGE。





...n

指定 boundary_value 提供的值的數目,不能超過 999。所創建的分區數等於 n + 1。不必按順序列出各值。如果值未按順序列出,則數據庫引擎將對它們進行排序、創建函數並返回一個警告,說明未按順序提供值。如果 n 包括任何重複的值,則數據庫引擎將返回錯誤。
LEFT | RIGHT

指定當間隔值由 數據庫引擎 按升序從左到右排序時,boundary_value [ ,...n ] 屬於每個邊界值間隔的哪一側(左側還是右側)。如果未指定,則默認值爲 LEFT。有關詳細信息,請參閱示例。
備註

分區函數的作用域被限制爲在其中創建該分區函數的數據庫。在該數據庫內,分區函數駐留在與其他函數的命名空間不同的一個單獨命名空間內。

分區列爲空值的所有行都放在最左側分區中,除非將 NULL 指定爲邊界值並指定了 RIGHT。在這種情況下,最左側分區爲空分區,NULL 值被放置在後面的分區中。
權限

可以使用下列任何一種權限執行 CREATE PARTITION FUNCTION:
ALTER ANY DATASPACE 權限。默認情況下,此權限授予 sysadmin 固定服務器角色和 db_owner 及 db_ddladmin 固定數據庫角色的成員。
在其中創建分區函數的數據庫的 CONTROL 或 ALTER 權限。
在其中創建分區函數的數據庫所在服務器的 CONTROL SERVER 或 ALTER ANY DATABASE 權限。
示例
A. 對 int 列創建 RANGE LEFT 分區函數

以下分區函數將表或索引分爲四個分區。
複製代碼
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

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 < 1
col1 >= 1 AND col1 < 100
col1 >= 100 AND col1 < 1000
col1 >= 1000

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 < 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

以下分區函數將表或索引分爲四個分區。
複製代碼
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章