Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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: