Ändra en partitionsfunktion
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Du kan ändra hur en tabell eller ett index partitioneras i SQL Server, Azure SQL Database och Azure SQL Managed Instance genom att lägga till eller subtrahera antalet angivna partitioner i steg om 1 i partitionsfunktionen i den partitionerade tabellen eller indexet med hjälp av Transact-SQL. När du lägger till en partition gör du det genom att "dela upp" en befintlig partition i två partitioner och omdefiniera gränserna för de nya partitionerna. När du släpper en partition gör du det genom att "slå samman" gränserna för två partitioner i en. Den här sista åtgärden fyller i en partition igen och lämnar den andra partitionen otilldelad. Granska metodtips innan du ändrar en partitionsfunktion.
Försiktighet
Fler än en tabell eller ett index kan använda samma partitionsfunktion. När du ändrar en partitionsfunktion påverkar du alla i en enda transaktion. Kontrollera partitionsfunktionens beroenden innan du ändrar den.
Tabellpartitionering är också tillgängligt i dedikerade SQL-pooler i Azure Synapse Analytics, med vissa syntaxskillnader. Läs mer i Partitioneringstabeller i dedikerade SQL-pooler.
Begränsningar
FUNKTIONEN ALTER PARTITION kan bara användas för att dela upp en partition i två eller för sammanslagning av två partitioner i en. Om du vill ändra hur en tabell eller ett index partitioneras (från till exempel 10 partitioner till 5) kan du använda något av följande alternativ:
Skapa en ny partitionerad tabell med önskad partitionsfunktion och infoga sedan data från den gamla tabellen i den nya tabellen genom att antingen använda en INSERT INTO ... VÄLJ FRÅN Transact-SQL-instruktionen eller Hantera partitionsguiden i SQL Server Management Studio (SSMS).
Skapa ett partitionerat klustrat index på en heap.
Not
Att ta bort ett partitionerat klustrat index resulterar i en partitionerad heap.
Släpp och återskapa ett befintligt partitionerat index med hjälp av satsen Transact-SQL CREATE INDEX med klausulen DROP EXISTING = ON.
Utför en sekvens av ALTER PARTITION FUNCTION-kommandon.
Databasmotorn ger inte replikeringsstöd för att ändra en partitionsfunktion. Om du vill göra ändringar i en partitionsfunktion i publikationsdatabasen måste du göra detta manuellt i prenumerationsdatabasen.
Alla filgrupper som påverkas av ALTER PARTITION FUNCTION måste vara online.
Behörigheter
Någon av följande behörigheter kan användas för att köra ALTER 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.
KONTROLL- eller ALTER-behörighet för databasen där partitionsfunktionen skapades.
CONTROL SERVER eller behörigheten ALTER ANY DATABASE på servern för databasen där partitionsfunktionen skapades.
Fråga partitionerade objekt i en databas
Följande fråga visar en lista över alla partitionerade objekt i en databas. Detta kan användas för att kontrollera beroenden för en partitionsfunktion innan du ändrar den.
SELECT
PF.name AS PartitionFunction,
ds.name AS PartitionScheme,
OBJECT_SCHEMA_NAME(si.object_id) as SchemaName,
OBJECT_NAME(si.object_id) AS PartitionedTable,
si.name as IndexName
FROM sys.indexes AS si
JOIN sys.data_spaces AS ds
ON ds.data_space_id = si.data_space_id
JOIN sys.partition_schemes AS PS
ON PS.data_space_id = si.data_space_id
JOIN sys.partition_functions AS PF
ON PF.function_id = PS.function_id
WHERE ds.type = 'PS'
AND OBJECTPROPERTYEX(si.object_id, 'BaseType') = 'U'
ORDER BY PartitionFunction, PartitionScheme, SchemaName, PartitionedTable;
Dela en partition med Transact-SQL
I Object Exploreransluter du till måldatabasen.
I standardfältet väljer du Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och välj Kör.
Det här exemplet:
- Söker efter en tidigare version av partitionsfunktionen
myRangePF1
och tar bort den om den hittas. - Skapar en partitionsfunktion med namnet
myRangePF1
som partitioner en tabell i fyra partitioner. - Delar partitionen mellan boundary_values 100 och 1000 för att skapa en partition mellan boundary_values 100 och 500 och en partition mellan boundary_values 500 och 1000.
IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = 'myRangePF1') DROP PARTITION FUNCTION myRangePF1; GO CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES ( 1, 100, 1000 ); GO ALTER PARTITION FUNCTION myRangePF1 () SPLIT RANGE (500);
- Söker efter en tidigare version av partitionsfunktionen
Sammanfoga två partitioner med Transact-SQL
I Object Exploreransluter du till måldatabasen.
I standardfältet väljer du Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och välj Kör.
Det här exemplet:
- Kontrollerar om en tidigare version av partitionsfunktionen
myRangePF1
finns och tar bort den om den hittas. - Skapar en partitionsfunktion med namnet
myRangePF1
med tre gränsvärden, vilket resulterar i fyra partitioner. - Sammanfogar partitionen mellan boundary_values 1 och 100 med partitionen mellan boundary_values 100 och 1 000.
- Detta resulterar i att partitionsfunktionen
myRangePF1
har två gränspunkter, 1 och 1 000.
IF EXISTS (SELECT * FROM sys.partition_functions WHERE name = 'myRangePF1') DROP PARTITION FUNCTION myRangePF1; GO CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES ( 1, 100, 1000 ); GO ALTER PARTITION FUNCTION myRangePF1 () MERGE RANGE (100);
- Kontrollerar om en tidigare version av partitionsfunktionen
Ta bort en partitionsfunktion med SSMS
I Object Exploreransluter du till måldatabasen.
Expandera databasen där du vill ta bort partitionsfunktionen och expandera sedan mappen Storage.
Expandera mappen Partition Functions.
Högerklicka på den partitionsfunktion som du vill ta bort och välj Ta bort.
I dialogrutan Ta bort objekt kontrollerar du att rätt partitionsfunktion är markerad och väljer sedan OK.
Nästa steg
Läs mer om relaterade begrepp i följande artiklar: