Как добавить раздел в существующую таблицу? - PullRequest
0 голосов
/ 16 апреля 2019

Учитывая функцию разделения (MonthlyPartition(DateTime2)), схему разделения (Logs_PartitionScheme), использующую эту функцию, и таблицу (Logs), для которой требуется, чтобы это разделение применялось к своему полю [DateTime];как добавить раздел в таблицу?

Я пробовал:

ALTER TABLE dbo.Logs
ADD PARTITION Logs_PartitionScheme

, но просто запустите его при запуске:

Столбец,параметр или переменная # 40: не удается найти тип данных Logs_PartitionScheme.

Я думаю, что это просто попытка добавить столбец с именем "PARTITION" в Logs с типом Logs_PartitionScheme.Я также получаю то же самое, если заменить Logs_PartitionScheme на MonthlyPartition.

Logs_PartitionScheme выглядит следующим образом:

CREATE PARTITION SCHEME CatLogs_PartitionScheme
AS PARTITION MonthlyPartition
ALL TO ([Primary])

MonthlyPartition выглядит следующим образом:

DECLARE @partitionsTable dbo.VarCharCollectionTableType --User-Defined Table Type to hold a collection of VarChars.

INSERT INTO @partitionsTable
SELECT DISTINCT CONCAT(FORMAT(RY, '0000'), FORMAT(RM, '00'), '01')
FROM dbo.Logs

DECLARE @partitionsString VARCHAR(MAX)

SELECT @partitionsString =
    CASE
        WHEN @partitionsString IS NULL
        THEN CONCAT('''', [Text], '''')
        ELSE CONCAT(@partitionsString, ', ''', [Text], '''')
    END
    FROM @partitionsTable
    ORDER BY [Text]

DECLARE @statement NVARCHAR(MAX) =
(
    SELECT CONCAT
    (
        N'CREATE PARTITION FUNCTION MonthlyPartition(DateTime2)
        AS RANGE RIGHT FOR VALUES
        (',
        @partitionsString,
        ')'
    )
)

EXECUTE SP_EXECUTESQL @statement

1 Ответ

0 голосов
/ 16 апреля 2019

Чтобы создать новый раздел, установите желаемую схему разделения следующей используемой файловой группы и SPLIT функцию для создания новой границы раздела для данных в этой файловой группе. Например:

ALTER PARTITION SCHEME Logs_PartitionScheme NEXT USED [PRIMARY];
ALTER PARTITION FUNCTION MonthlyPartition() SPLIT RANGE('2019-05-01T00:00:00.0000000');
...