Udostępnij za pomocą


FUNKCJA TWORZENIA PARTYCJI (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Tworzy funkcję w bieżącej bazie danych, która mapuje wiersze tabeli lub indeksu na partycje oparte na wartościach określonej kolumny. Użycie funkcji CREATE PARTITION jest pierwszym krokiem w tworzeniu tabeli lub indeksu podzielonego. Tabela lub indeks może mieć maksymalnie 15 000 partycji.

Transact-SQL konwencje składni

Składnia

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

Arguments

partition_function_name
To nazwa funkcji partycji. Nazwy funkcji partycji muszą być unikalne w bazie danych i zgodne z zasadami dotyczącymi identyfikatorów.

input_parameter_type
To typ danych kolumny używanej do partycjonowania. Wszystkie typy danych są ważne do użycia jako kolumny partycjonujące, z wyjątkiem tekstu, ntextu, obrazu, xml, znacznika czasu, varchar(max),nvarchar(max),varbinary(max), typów danych aliasów lub typów danych CLR zdefiniowanych przez użytkownika.

Rzeczywista kolumna, znana jako kolumna partycjonowania, jest określana w instrukcjach CREATE TABLE lub CREATE INDEX.

boundary_value
Określa wartości brzegów dla każdej partycji tabeli lub indeksu podzielonego, która używa partition_function_name. Jeśli boundary_value jest pusty, funkcja partycji odwzorowuje całą tabelę lub indeks za pomocą partition_function_name na jedną partycję. Można użyć tylko jednej kolumny partycjonowania, określonej w instrukcjach CREATE TABLE lub CREATE INDEX.

boundary_value jest wyrażeniem stałym, które może odwoływać się do zmiennych. Obejmuje to zmienne typowe zdefiniowane przez użytkownika, czyli funkcje, oraz funkcje zdefiniowane przez użytkownika. Nie może odnosić się do Transact-SQL wyrażeń. boundary_value musi albo odpowiadać, albo być niejawnie konwertowalna z typem danych podanym w input_parameter_type i nie może być obcięta podczas niejawnej konwersji w taki sposób, że rozmiar i skala wartości nie zgadzają się z odpowiadającą jej input_parameter_type.

Uwaga / Notatka

Jeśli boundary_value składa się z literałów datetime lub smalldatetime , literale te ocenia się przy założeniu, że us_english jest językiem sesji. Takie zachowanie jest przestarzałe. Aby mieć pewność, że definicja funkcji partycji zachowuje się zgodnie z oczekiwaniami dla wszystkich języków sesji, zalecamy użycie stałych interpretowanych tak samo dla wszystkich ustawień językowych, takich jak format yyyymmdd; albo wyraźnie przekonwertować literaly na określony styl. Aby określić sesję językową swojego serwera, uruchom SELECT @@LANGUAGE.

Aby uzyskać więcej informacji, zobacz Niedeterministyczna konwersja ciągów dat literału na wartości DATE.

... n
Określa liczbę wartości dostarczonych przez boundary_value, nie przekraczającą 14 999. Liczba utworzonych partycji jest równa n + 1. Wartości nie muszą być podawane w kolejności. Jeśli wartości nie są w kolejności, silnik bazy danych je sortuje, tworzy funkcję i zwraca ostrzeżenie, że wartości nie są podawane w kolejności. Silnik bazy danych zwraca błąd, jeśli n zawiera jakiekolwiek zduplikowane wartości.

LEWA | PRAWY
Określa, po której stronie każdego przedziału brzegowego, po lewej lub prawej, boundary_value [ ,... n ] należy do , gdy wartości interwałowe są sortowane według silnika bazy danych rosnąco od lewej do prawej. Jeśli nie jest to określone, domyślnie jest LEFT.

Uwagi

Zakres funkcji partycji jest ograniczony do bazy danych, w której została utworzona. W bazie danych funkcje partycjonujące znajdują się w osobnej przestrzeni nazw od pozostałych funkcji.

Wszystkie wiersze, których kolumna partycjonująca zawiera wartości null, są umieszczane w najbardziej lewej partycji, chyba że NULL jest określony jako wartość brzegowa i oznaczone jest RIGHT. W tym przypadku najbardziej lewa partycja jest pustą, a wartości NULL umieszczane są w następnej partycji.

Permissions

Do wykonania funkcji CREATE PARTITION FUNCTION można użyć dowolnych z następujących uprawnień:

  • ZMIENIANIE UPRAWNIEŃ DO PRZESTRZENI DANYCH To uprawnienie domyślnie dotyczy członków stałej roli serwera sysadmin oraz stałych ról bazy danych db_owner i db_ddladmin.

  • CONTROL lub uprawnienia ALTER na bazie danych, w której tworzona jest funkcja partycji.

  • CONTROL SERVER lub ALTER DOWOLNĄ BAZĘ DANYCH uprawnień na serwerze bazy danych, w której tworzona jest funkcja partycji.

Przykłady

A. Tworzenie funkcji partycji RANGE LEFT na kolumnie int

Poniższa funkcja partycji podzieli tabelę lub indeks na cztery partycje.

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

Poniższa tabela pokazuje, jak tabela wykorzystująca tę funkcję partycjonowania na kolumnie podziału kolumny 1 byłaby partycjonowana.

Partition 1 2 3 4
Wartości col1<= 1 col1>1 AND col1<= 100 col1>100 AND col1<=1000 col1>1000

B. Tworzenie funkcji partycji RANGE RIGHT na kolumnie int

Następująca funkcja partycji używa tych samych wartości dla boundary_value [ ,... n ] jak w poprzednim przykładzie, z wyjątkiem tego, że określa ZAKRES PRAWY.

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

Poniższa tabela pokazuje, jak tabela wykorzystująca tę funkcję partycjonowania na kolumnie podziału kolumny 1 byłaby partycjonowana.

Partition 1 2 3 4
Wartości col1<1 col1>= 1 I col1<100 col1>= 100 I col1<1000 col1>= 1000

C. Tworzenie funkcji partycji RANGE RIGHT na kolumnie datetime

Poniższa funkcja partycji dzieli tabelę lub indeks na 12 partycji, po jednej dla każdego miesiąca wartości z danego roku w kolumnie date-time .

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

Poniższa tabela pokazuje, jak tabela lub indeks wykorzystujący tę funkcję partycjonowania przy partycjonowaniu kolumnowego datecol byłby partycjonowany.

Partition 1 2 ...\ 11 12
Wartości datecol<February 1, 2003 datecol>= February 1, 2003 I datecol<March 1, 2003 datecol>= November 1, 2003 I col1<December 1, 2003 datecol>= December 1, 2003

D. Tworzenie funkcji partycji na kolumnie char

Poniższa funkcja partycji dzieli tabelę lub indeks na cztery partycje.

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

Poniższa tabela pokazuje, jak tabela wykorzystująca tę funkcję partycjonowania na kolumnie podziału kolumny 1 byłaby partycjonowana.

Partition 1 2 3 4
Wartości col1<EX... col1>= EX I KOLONEK1<RXE... col1>= RXE I KOLONEK1<XR... col1>= XR

E. Tworzenie 15 000 partycji

Poniższa funkcja partycji dzieli tabelę lub indeks na 15 000 partycji.

--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. Tworzenie partycji przez kilka lat

Poniższa funkcja partycji dzieli tabelę lub indeks na 50 partycji w kolumnie datetime2 . Na każdy miesiąc między styczniem 2007 a styczniem 2011 roku przypada jeden podział.

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

Dalsze kroki

Dowiedz się więcej o partycjonowaniu tabel i powiązanych porozumieniach w następujących artykułach: