sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan rettes "Den tilknyttede partitionsfunktion genererer flere partitioner, end der er filgrupper nævnt i skemaet" Msg 7707 i SQL Server

Hvis du får fejlmeddelelse 7707 i SQL Server, er det fordi du forsøger at oprette et partitionsskema, der ikke specificerer nok filgrupper til at matche partitionsfunktionen.

Heldigvis er dette nemt at rette.

Eksempel på fejlen

Fejlen ser nogenlunde sådan ud:

Msg 7707, Level 16, State 1, Line 1
The associated partition function 'CatsPartitionFunction' generates more partitions than there are file groups mentioned in the scheme 'CatsPartitionScheme'.

Hvorfor skete dette?

I mit tilfælde specificerede jeg tre filgrupper, da jeg oprettede partitionsskemaet, men partitionsfunktionen genererede faktisk fire.

Her er koden, jeg brugte til at oprette partitionsfunktionen og partitionsskemaerne.

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO  

CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    TO (CatsFg1, CatsFg2, CatsFg3);  
GO

Min partitionsfunktion har tre grænseværdier, hvilket resulterer i fire partitioner. Mit partitionsskema specificerer kun tre filgrupper (der skal være fire).

Dette er en let fejl at lave, for når du opretter partitionsfunktionen, er antallet af grænseværdier, du angiver, faktisk én mindre end antallet af resulterende partitioner. Med andre ord vil antallet af oprettede partitioner være lig med antallet af grænseværdier + 1.

Hvis du ikke er helt med på bolden, kan du ved et uheld matche antallet af filgrupper med grænseværdierne og glemme, at du skal angive en filgruppe mere.

Ret fejlen

Så for at rette denne fejl skal jeg kun angive en filgruppe mere, når jeg opretter partitionsskemaet.

Min kode skulle se mere sådan ud:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO 

CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    TO (CatsFg1, CatsFg2, CatsFg3, CatsFg4);  
GO

I dette tilfælde tilføjede jeg simpelthen CatsFg4 til listen over filgrupper. Dette forudsætter naturligvis, at den angivne filgruppe eksisterer.

Bemærk også, at du ikke nødvendigvis behøver at oprette en helt ny filgruppe. Du kan dele filgrupper (dvs. have flere partitioner knyttet til en enkelt filgruppe).

Derfor kunne jeg have gjort dette:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO 

CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    TO (CatsFg1, CatsFg2, CatsFg3, CatsFg3);  
GO

Bemærk, at de sidste to filgrupper er de samme (CatsFg3 ).

Men du behøver ikke at stoppe der. En anden tilgang er at have alle partitioner knyttet til filgruppen.

I dette tilfælde kunne vi bruge ALL argument, og angiv kun én filgruppe:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO  
 
CREATE PARTITION SCHEME CatsPartitionScheme  
    AS PARTITION CatsPartitionFunction  
    ALL TO (CatsFg1);  
GO


  1. Hvordan bruger man en SQL for loop til at indsætte rækker i databasen?

  2. Sådan fungerer Setseed() i PostgreSQL

  3. MVC4:UserIsInRole - Kan ikke oprette forbindelse til SQL Server-databasen

  4. Hvilke kolonner giver generelt gode indekser?