Delen via


MAAK PARTITIEFUNCTIE AAN (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Maakt een functie aan in de huidige database die de rijen van een tabel of index in partities omzet op basis van de waarden van een opgegeven kolom. Het gebruik van de PARTITIEFUNCTIE AANMAKEN is de eerste stap bij het maken van een gepartitioneerde tabel of index. Een tabel of index kan maximaal 15.000 partities hebben.

Transact-SQL syntaxis-conventies

Syntaxis

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

Arguments

partition_function_name
Is de naam van de partitiefunctie. Partitiefunctienamen moeten uniek zijn binnen de database en voldoen aan de regels voor identifiers.

input_parameter_type
Is het datatype van de kolom die wordt gebruikt voor partitionering. Alle datatypes zijn geldig voor gebruik als partitionerende kolommen, behalve text, ntext, afbeelding, xml, timestamp, varchar(max),nvarchar(max),varbinary(max), alias-datatypes of CLR-door gebruikers gedefinieerde datatypes.

De daadwerkelijke kolom, bekend als een partitioneringskolom, wordt gespecificeerd in de CREATE TABLE- of CREATE INDEX-instructie.

boundary_value
Specificeert de grenswaarden voor elke partitie van een gepartitioneerde tabel of index die partition_function_name gebruikt. Als boundary_value leeg is, brengt de partitiefunctie de hele tabel of index met partition_function_name in één enkele partitie. Slechts één partitioneringskolom, gespecificeerd in een CREATE TABLE- of CREATE INDEX-instructie, kan worden gebruikt.

boundary_value is een constante uitdrukking die variabelen kan verwijzen. Dit omvat door de gebruiker gedefinieerde typevariabelen, of functies en door de gebruiker gedefinieerde functies. Het kan geen verwijzing naar Transact-SQL uitdrukkingen. boundary_value moet ofwel overeenkomen met of impliciet converteerbaar zijn naar het datatype dat in input_parameter_type wordt geleverd, en kan tijdens impliciete conversie niet worden afgekapt op een manier waarbij de grootte en schaal van de waarde niet overeenkomen met die van de bijbehorende input_parameter_type.

Opmerking

Als boundary_value bestaat uit datetime of smalldatetime literals, worden deze literals geëvalueerd met de aanname dat us_english de sessietaal is. Dit gedrag wordt afgekeurd. Om ervoor te zorgen dat de partitiefunctiedefinitie zich voor alle sessietalen gedraagt zoals verwacht, raden we aan constanten te gebruiken die op dezelfde manier worden geïnterpreteerd voor alle taalinstellingen, zoals het yyyymmdd-formaat; of expliciet letterlijke stijlen omzetten naar een specifieke stijl. Om de taalsessie van je server te bepalen, voer SELECT @@LANGUAGEje . uit

Zie Niet-deterministische conversie van letterlijke datumtekenreeksen in DATUM-waardenvoor meer informatie.

... n
Specificeert het aantal waarden dat door boundary_value wordt geleverd, niet hoger dan 14.999. Het aantal gemaakte partities is gelijk aan n + 1. De waarden hoeven niet in volgorde te worden vermeld. Als de waarden niet in volgorde zijn, sorteert de Database Engine ze, creëert de functie en geeft een waarschuwing terug dat de waarden niet in volgorde zijn gegeven. De Database Engine geeft een foutmelding als n dubbele waarden bevat.

LINKS | RECHTS
Geeft aan aan welke kant van elk randwaardeinterval, links of rechts, de boundary_value [ ,... n ] behoort toe, wanneer intervalwaarden door de Database Engine in oplopende volgorde van links naar rechts worden gesorteerd. Als dat niet wordt gespecificeerd, is LINKS de standaard.

Opmerkingen

De reikwijdte van een partitiefunctie is beperkt tot de database waarin deze is aangemaakt. Binnen de database bevinden partitiefuncties zich in een aparte naamruimte van de andere functies.

Alle rijen waarvan de partitioneringskolom nullwaarden heeft, worden in de meest linkse partitie geplaatst, tenzij NULL als grenswaarde is gespecificeerd en RIGHT wordt aangegeven. In dit geval is de meest linkse partitie een lege partitie, en worden NULL-waarden in de volgende partitie geplaatst.

Permissions

Elk van de volgende permissies kan worden gebruikt om de functie CREATE PARTITION UIT TE VOEREN:

  • ELKE DATASPACE-machtiging WIJZIGEN. Deze machtiging is standaard ingesteld op leden van de sysadmin vaste serverfunctie en de db_owner en db_ddladmin vaste databaserollen.

  • CONTROL- of ALTER-toestemming op de database waarin de partitiefunctie wordt gemaakt.

  • CONTROL SERVER of WYSIG EEN DATABASE-toestemming op de server van de database waarin de partitiefunctie wordt aangemaakt.

Voorbeelden

Eén. Het aanmaken van een RANGE LEFT-partitiefunctie op een int-kolom

De volgende partitiefunctie zal een tabel of index opdelen in vier partities.

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

De volgende tabel toont hoe een tabel die deze partitiefunctie gebruikt op partitioneringskolom col1 zou worden gepartitioneerd.

Partition 1 2 3 4
waarden kol1<= 1 kol1>1 EN kol1<= 100 kol1>100 EN kol1<=1000 kol1>1000

B. Een RANGE RIGHT-partitiefunctie aanmaken op een int-kolom

De volgende partitiefunctie gebruikt dezelfde waarden voor boundary_value [ ,... n ] zoals het vorige voorbeeld, behalve dat het BEREIK RECHTS specificeert.

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

De volgende tabel toont hoe een tabel die deze partitiefunctie gebruikt op partitioneringskolom col1 zou worden gepartitioneerd.

Partition 1 2 3 4
waarden kol1<1 kol1>= 1 EN kol1<100 kol1>= 100 EN kol1<1000 kol1>= 1000

C. Een RANGE RIGHT-partitiefunctie aanmaken in een datetime-kolom

De volgende partitiefunctie verdeelt een tabel of index in 12 partities, één voor elke maand van een jaar aan waarden in een datum-tijdkolom .

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

De volgende tabel laat zien hoe een tabel of index die deze partitiefunctie gebruikt op het partitioneren van kolomdatecol zou worden gepartitioneerd.

Partition 1 2 ... 11 12
waarden Datecol<February 1, 2003 Datecol>= February 1, 2003 EN datecol<March 1, 2003 Datecol>= November 1, 2003 EN kol1<December 1, 2003 Datecol>= December 1, 2003

D. Een partitiefunctie aanmaken op een karakterkolom

De volgende partitiefunctie verdeelt een tabel of index in vier partities.

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

De volgende tabel toont hoe een tabel die deze partitiefunctie gebruikt op partitioneringskolom col1 zou worden gepartitioneerd.

Partition 1 2 3 4
waarden kol1<EX... kol1>= EX EN kol1<RXE... kol1>= RXE EN kol1<XR... kol1>= XR

E. Het creëren van 15.000 partities

De volgende partitiefunctie verdeelt een tabel of index in 15.000 partities.

--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. Partities aanmaken voor meerdere jaren

De volgende partitiefunctie verdeelt een tabel of index in 50 partities op een datetime2-kolom . Er is één verdeling per maand tussen januari 2007 en januari 2011.

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

Volgende stappen

Lees meer over tabelpartitionering en gerelateerde concepten in de volgende artikelen: