Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да коригирате „Свързаната функция за дял генерира повече дялове, отколкото има файлови групи, споменати в схемата“ Msg 7707 в SQL Server

Ако получите съобщение за грешка 7707 в SQL Server, това е, защото се опитвате да създадете схема на дялове, която не посочва достатъчно файлови групи, които да съответстват на функцията за дял.

За щастие това е лесно да се поправи.

Пример за грешката

Грешката изглежда така:

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

Защо се случи това?

В моя случай посочих три файлови групи при създаването на схемата за дялове, но функцията за дял всъщност генерира четири.

Ето кода, който използвах, за да създам функцията за разделяне и схемите за дялове.

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

Моята функция за дял има три гранични стойности, което води до четири дяла. Моята схема на дялове определя само три файлови групи (трябва да има четири).

Това е лесна грешка, тъй като когато създавате функцията за дял, броят на граничните стойности, които задавате, всъщност е с една по-малка от броя на получените дялове. С други думи, броят на създадените дялове ще бъде равен на броя на граничните стойности + 1.

Ако не сте напълно в топката, може по невнимание да съпоставите броя на файловите групи с граничните стойности, като забравите, че трябва да посочите още една файлова група.

Поправете грешката

Така че, за да коригирам тази грешка, всичко, което трябва да направя, е да посоча още една файлова група, когато създавам схемата на дяловете.

Моят код трябва да изглежда по-скоро така:

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

В този случай просто добавих CatsFg4 към списъка с файлови групи. Това очевидно предполага, че посочената файлова група съществува.

Също така имайте предвид, че не е задължително да създавате изцяло нова файлова група. Можете да споделяте файлови групи (т.е. да имате няколко дяла, съпоставени в една файлова група).

Следователно можех да направя това:

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

Забележете, че последните две файлови групи са еднакви (CatsFg3 ).

Но не е нужно да спирате дотук. Друг подход е да имате всички дялове, съпоставени с файловата група.

В този случай бихме могли да използваме ALL аргумент и посочете само една файлова група:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се изпълняват множество DDL изрази в транзакция (в рамките на SQL Server)?

  2. Как да настроите съпоставянето на колона в SQL Server (T-SQL)

  3. Актуализирайте данните чрез функция с таблично значение в SQL Server

  4. Лесен начин изберете дясната колона като първичен ключ за дадена таблица

  5. Как мога да определя в SQL Server дали диапазон дата и време се припокрива с друг