#sql-server #tsql #partition
#sql-server #tsql #раздел
Вопрос:
Учитывая функцию разделения ( MonthlyPartition(DateTime2)
), схему разделения ( Logs_PartitionScheme
), использующую эту функцию, и таблицу ( Logs
), для которой этот раздел должен применяться к ее [DateTime]
полю; как мне добавить раздел в таблицу?
Я пробовал:
ALTER TABLE dbo.Logs
ADD PARTITION Logs_PartitionScheme
но просто получите это, когда я его запущу:
Столбец, параметр или переменная # 40: не удается найти Logs_PartitionScheme типа данных.
Я думаю, что это просто попытка добавить столбец с именем «РАЗДЕЛ» 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
Комментарии:
2. Вы должны удалить свой кластеризованный индекс и повторно добавить его с
on partition Logs_PartitionScheme
помощью предложения3. Какой кластеризованный индекс? У меня есть один в поле Primary Key (
Id
) — этот?4. Да … первичный ключ, вероятно, s / b кластеризован… и любые индексы, использующие первичный ключ или столбец раздела, также должны быть
on partition...
добавлены в индекс.5. Извините, я все еще пытаюсь заставить это работать! Я не могу удалить и повторно добавить кластеризованный индекс, потому что он является частью первичного ключа. Я попытался повторно добавить первичный ключ как некластеризованный, а затем создать кластеризованный индекс таким образом
CREATE CLUSTERED INDEX IX_Logs_ParentEntityId_DateTime ON dbo.Logs ( ParentEntityId, [DateTime] ) PARTITION Logs_PartitionScheme
, но затем я просто получаю:> Неправильный синтаксис рядом с «РАЗДЕЛОМ».
Ответ №1:
Чтобы создать новый раздел, установите для схемы разделов next used filegroup желаемую и SPLIT
функцию для создания новой границы раздела для данных в этой файловой группе. Например:
ALTER PARTITION SCHEME Logs_PartitionScheme NEXT USED [PRIMARY];
ALTER PARTITION FUNCTION MonthlyPartition() SPLIT RANGE('2019-05-01T00:00:00.0000000');
Комментарии:
1. Я включу определения
Logs_PartitionScheme
иMonthlyPartition
в вопрос. Я не думаю, что этот код делает то, что мне нужно (то есть добавляет схему или функцию в таблицу).