Sdílet prostřednictvím


CREATE PARTITION FUNCTION (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vytváří funkci v aktuální databázi, která mapuje řádky tabulky nebo indexu do oddílů na základě hodnot zadaného sloupce. Prvním krokem při vytváření rozdělené tabulky nebo indexu je použití funkce CREATE PARTITION FUNCTION. Tabulka nebo index může mít maximálně 15 000 oddílů.

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

partition_function_name
Je název partition funkce. Názvy funkcí rozdělení musí být v databázi jedinečné a splňovat pravidla pro identifikátory.

input_parameter_type
je datový typ sloupce používaný pro dělení na části. Všechny datové typy jsou platné pro použití jako dělící sloupce, kromě textu, ntextu, image, xml, časového razítka, varchar(max),nvarchar(max),varbinary(max), aliasových datových typů nebo CLR uživatelsky definovaných datových typů.

Skutečný sloupec, známý jako dělící sloupec, je specifikován v příkazech CREATE TABLE nebo CREATE INDEX.

boundary_value
Specifikuje hodnoty hranic pro každou partition tabulky nebo indexu, který používá partition_function_name. Pokud je boundary_value prázdný, funkce oddílu přemapuje celou tabulku nebo index pomocí partition_function_name do jednoho oddílu. Lze použít pouze jeden sloupec pro rozdělení, specifikovaný v příkazech CREATE TABLE nebo CREATE INDEX.

boundary_value je konstantní výraz, který může odkazovat na proměnné. To zahrnuje uživatelsky definované typové proměnné, neboli funkce, a uživatelem definované funkce. Nemůže odkazovat na Transact-SQL výrazy. boundary_value musí buď odpovídat, nebo být implicitně konvertovatelný s datovým typem dodaným v input_parameter_type a nesmí být při implicitní konverzi zkrácen tak, že velikost a měřítko hodnoty neodpovídají velikosti odpovídající input_parameter_type.

Poznámka:

Pokud boundary_value sestává z literálů datetime nebosmalldatetime , tyto literály se hodnotí za předpokladu, že us_english je jazyk relace. Toto chování je zastaralé. Aby definice partition funkce fungovala podle očekávání pro všechny relační jazyky, doporučujeme používat konstanty, které jsou interpretovány stejně pro všechna jazyková nastavení, například formát yyyymmdd; nebo explicitně převádět literály do konkrétního stylu. Pro určení jazykové relace vašeho serveru spusťte SELECT @@LANGUAGE.

Další informace naleznete v tématu Nedeterministický převod doslovných řetězců data na hodnoty DATE.

... n
Specifikuje počet hodnot dodaných boundary_value, nesmí překročit 14 999. Počet vytvořených oddílů je roven n + 1. Hodnoty nemusí být uvedeny v pořadí. Pokud hodnoty nejsou v pořadí, databázový engine je seřadí, vytvoří funkci a vrátí varování, že hodnoty nejsou uvedeny v pořadí. Databázový engine vrací chybu, pokud n obsahuje nějaké duplicitní hodnoty.

LEFT | VPRAVO
Specifikuje, na které straně každého intervalu okrajových hodnot, vlevo nebo vpravo, boundary_value [ ,... n ] patří, když jsou intervalové hodnoty seřazeny podle databázového enginu vzestupně zleva doprava. Pokud není specifikováno, výchozí je LEFT.

Poznámky

Rozsah partition funkce je omezen na databázi, ve které je vytvořena. V databázi se funkce oddílů nacházejí v samostatném jmenném prostoru od ostatních funkcí.

Všechny řádky, jejichž sloupec pro dělení obsahuje null, jsou umístěny do nejlevější části, pokud není NULL zadána jako hraniční hodnota a není označeno RIGHT. V tomto případě je nejlevější oddíl prázdný a hodnoty NULL jsou umístěny do následujícího oddílu.

Povolení

K vykonání funkce CREATE PARTITION FUNCTION lze použít jakékoli z následujících oprávnění:

  • Oprávnění ALTER ANY DATASPACE. Toto oprávnění ve výchozím nastavení platí pro členy pevných rolí serveru sysadmin a pevných databázových rolí db_owner a db_ddladmin.

  • CONTROL nebo ALTER oprávnění na databázi, ve které je funkce oddílu vytvářena.

  • CONTROL SERVER nebo ALTER ANY DATABASE oprávnění na serveru databáze, ve které je funkce partition vytvářena.

Examples

A. Vytvoření partition funkce RANGE LEFT na sloupci int

Následující funkce rozdělení rozdělí tabulku nebo index na čtyři oddíly.

CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  

Následující tabulka ukazuje, jak by byla rozdělena tabulka používající tuto partition funkci na sloupci sloupce 1 .

Partition 1 2 3 4
Hodnoty sloupec 1<= 1 sloupec 1>1 AND col1<= 100 sloupec 1>100 AND col1<=1000 sloupec 1>1000

B. Vytvoření partition funkce RANGE RIGHT na sloupci int

Následující funkce oddílu používá stejné hodnoty pro boundary_value [ ,... n ] jako v předchozím příkladu, ale specifikuje RANGE RIGHT.

CREATE PARTITION FUNCTION myRangePF2 (int)  
AS RANGE RIGHT FOR VALUES (1, 100, 1000);  

Následující tabulka ukazuje, jak by byla rozdělena tabulka používající tuto partition funkci na sloupci sloupce 1 .

Partition 1 2 3 4
Hodnoty sloupec 1<1 sloupec 1>= 1 A sloupec1<100 sloupec 1>= 100 A sloupec1<1000 sloupec 1>= 1000

C. Vytvoření funkce RANGE RIGHT na sloupci datetime

Následující funkce rozdělení rozděluje tabulku nebo index na 12 oddílů, po jednom pro každý měsíc hodnoty za celý rok ve sloupci date-time .

CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)  
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',  
               '20030501', '20030601', '20030701', '20030801',   
               '20030901', '20031001', '20031101', '20031201');  

Následující tabulka ukazuje, jak by byla rozdělena tabulka nebo index, který používá tuto partition funkci při rozdělení sloupcového datecol .

Partition 1 2 ... 11 12
Hodnoty Datecol<February 1, 2003 Datecol>= February 1, 2003 A datecol<March 1, 2003 Datecol>= November 1, 2003 A sloupec1<December 1, 2003 Datecol>= December 1, 2003

D. Vytvoření partition funkce na sloupci char

Následující funkce rozdělení rozdělí tabulku nebo index na čtyři oddíly.

CREATE PARTITION FUNCTION myRangePF3 (char(20))  
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');  

Následující tabulka ukazuje, jak by byla rozdělena tabulka používající tuto partition funkci na sloupci sloupce 1 .

Partition 1 2 3 4
Hodnoty sloupec 1<EX... sloupec 1>= EX A sloupec1<RXE... sloupec 1>= RXE A sloupec1<XR... sloupec 1>= XR

E. Vytvoření 15 000 oddílů

Následující funkce rozdělení rozdělí tabulku nebo index na 15 000 oddílů.

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

F. Vytváření oddílů na více let

Následující funkce rozdělení rozděluje tabulku nebo index na 50 oddílů ve sloupci datetime2 . Mezi lednem 2007 a lednem 2011 je pro každý měsíc jedno rozdělení.

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

Další kroky

Více o dělení tabulek a souvisejících konceptech se dozvíte v následujících článcích: