Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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:
- MAKEN VAN PARTITIESCHEMA (Transact-SQL)
- gepartitioneerde tabellen en indexen
- Een partitiefunctie wijzigen
- Een partitieschema wijzigen
- sys.partition_functions (Transact-SQL)
- sys.partition_schemes (Transact-SQL)