Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Skapar en funktion i den aktuella databasen som mappar raderna i en tabell eller index till partitioner baserat på värdena i en specificerad kolumn. Att använda CREATE PARTITION-funktionen är det första steget i att skapa en partitionerad tabell eller index. En tabell eller index kan ha maximalt 15 000 partitioner.
Transact-SQL syntaxkonventioner
Syntax
CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )
AS RANGE [ LEFT | RIGHT ]
FOR VALUES ( [ boundary_value [ ,...n ] ] )
[ ; ]
Arguments
partition_function_name
Är namnet på partitionsfunktionen. Partitionsfunktionsnamn måste vara unika inom databasen och följa reglerna för identifierare.
input_parameter_type
Är datatypen för kolumnen som används för partitionering. Alla datatyper är giltiga för användning som partitionerande kolumner, förutom text, ntext, bild, xml, timestamp, varchar(max),nvarchar(max),varbinary(max), aliasdatatyper eller CLR-användardefinierade datatyper.
Den faktiska kolumnen, känd som en partitioneringskolumn, specificeras i satsen CREATE TABLE eller CREATE INDEX.
boundary_value
Specificerar gränsvärdena för varje partition i en partitionerad tabell eller index som använder partition_function_name. Om boundary_value är tomt mappar partitionsfunktionen hela tabellen eller indexet med partition_function_name till en enda partition. Endast en partitioneringskolumn, specificerad i en CREATE TABLE- eller CREATE INDEX-sats, kan användas.
boundary_value är ett konstant uttryck som kan referera till variabler. Detta inkluderar användardefinierade typvariabler, eller funktioner och användardefinierade funktioner. Den kan inte referera till Transact-SQL uttryck. boundary_value måste antingen matcha eller vara implicit konvertibel till den datatyp som tillhandahålls i input_parameter_type, och kan inte trunkeras under implicit konvertering på ett sätt så att värdets storlek och skala inte matchar motsvarande input_parameter_type.
Anmärkning
Om boundary_value består av datetime- eller smalldatetime-literaler utvärderas dessa literaler under antagandet att us_english är sessionsspråket. Detta beteende är föråldrat. För att säkerställa att definitionen av partitionsfunktionen beter sig som förväntat för alla sessionsspråk rekommenderar vi att du använder konstanter som tolkas på samma sätt för alla språkinställningar, såsom yyyymmdddd-formatet; eller uttryckligen konvertera bokstavliga talspråk till en specifik stil. För att bestämma språksessionen för din server, kör SELECT @@LANGUAGE.
Mer information finns i icke-deterministisk konvertering av bokstavliga datumsträngar till DATE-värden.
... n
Specificerar antalet värden som tillhandahålls av boundary_value, och får inte överstiga 14 999. Antalet partitioner som skapas är lika med n + 1. Värdena behöver inte listas i ordning. Om värdena inte är i ordning sorterar databasmotorn dem, skapar funktionen och återger en varning om att värdena inte anges i ordning. Databasmotorn returnerar ett fel om n innehåller några dubblettvärden.
VÄNSTER | HÖGER
Specificerar på vilken sida av varje randvärdesintervall, vänster eller höger, boundary_value [ ,... n ] hör hemma, när intervallvärden sorteras av databasmotorn i stigande ordning från vänster till höger. Om det inte specificeras är VÄNSTER standard.
Anmärkningar
Omfattningen av en partitionsfunktion är begränsad till den databas där den skapas. Inom databasen finns partitionsfunktionerna i ett separat namnrymd från de andra funktionerna.
Alla rader vars partitioneringskolumn har nullvärden placeras i den vänstra partitionen, om inte NULL anges som ett randvärde och HÖGER är angivet. I detta fall är den vänstra partitionen en tom partition, och NULL-värden placeras i följande partition.
Permissions
Någon av följande behörigheter kan användas för att köra CREATE PARTITION FUNCTION:
ÄNDRA ALLA DATASPACE-behörigheter. Den här behörigheten är standard för medlemmar i sysadmin fast serverroll och db_owner och db_ddladmin fasta databasroller.
CONTROL- eller ALTER-behörighet på databasen där partitionsfunktionen skapas.
CONTROL SERVER eller ÄNDRA NÅGON DATABASBEHÖRIGHET på servern i den databas där partitionsfunktionen skapas.
Examples
A. Skapa en RANGE LEFT-partitionsfunktion på en int-kolumn
Följande partitionsfunktion kommer att dela upp en tabell eller index i fyra partitioner.
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
Följande tabell visar hur en tabell som använder denna partitionsfunktion på partitioneringskolumnen col1 skulle partitioneras.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Värden |
COL1<= 1 |
COL1>1 OCH kol1<= 100 |
COL1>100 OCH kol1<=1000 |
COL1>1000 |
B. Skapa en RANGE RIGHT-partitionsfunktion på en int-kolumn
Följande partitionsfunktion använder samma värden för boundary_value [ ,... n ] som i föregående exempel, förutom att det specificerar RANGE RIGHT.
CREATE PARTITION FUNCTION myRangePF2 (int)
AS RANGE RIGHT FOR VALUES (1, 100, 1000);
Följande tabell visar hur en tabell som använder denna partitionsfunktion på partitioneringskolumnen col1 skulle partitioneras.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Värden |
COL1<1 |
COL1>= 1 OCH kol1<100 |
COL1>= 100 OCH kol1<1000 |
COL1>= 1000 |
C. Skapa en RANGE RIGHT-partitionsfunktion på en datetime-kolumn
Följande partitionsfunktion delar upp en tabell eller index i 12 partitioner, en för varje månad av ett års värden i en datetime-kolumn .
CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',
'20030501', '20030601', '20030701', '20030801',
'20030901', '20031001', '20031101', '20031201');
Följande tabell visar hur en tabell eller index som använder denna partitioneringsfunktion på partitioneringskolumnens datecol skulle partitioneras.
| Partition | 1 | 2 | ... | 11 | 12 |
|---|---|---|---|---|---|
| Värden |
Datecol<February 1, 2003 |
Datecol>= February 1, 2003 OCH datecol<March 1, 2003 |
Datecol>= November 1, 2003 OCH kol1<December 1, 2003 |
Datecol>= December 1, 2003 |
D. Skapa en partitionsfunktion på en char-kolumn
Följande partitionsfunktion delar upp en tabell eller index i fyra partitioner.
CREATE PARTITION FUNCTION myRangePF3 (char(20))
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');
Följande tabell visar hur en tabell som använder denna partitionsfunktion på partitioneringskolumnen col1 skulle partitioneras.
| Partition | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Värden |
COL1<EX... |
COL1>= EX OCH kol1<RXE... |
COL1>= RXE OCH kol1<XR... |
COL1>= XR |
E. Skapar 15 000 partitioner
Följande partitionsfunktion delar upp en tabell eller index i 15 000 partitioner.
--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. Skapa partitioner under flera år
Följande partitionsfunktion delar upp en tabell eller index i 50 partitioner på en datetime2-kolumn . Det finns en uppdelning för varje månad mellan januari 2007 och 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
Nästa steg
Läs mer om tabellpartitionering och relaterade koncept i följande artiklar: