【发布时间】:2019-09-06 13:30:51
【问题描述】:
给定一个分区函数 (MonthlyPartition(DateTime2))、一个使用该函数的分区方案 (Logs_PartitionScheme) 和一个需要将该分区应用于其 [DateTime] 字段的表 (Logs);如何将分区添加到表中?
我试过了:
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])
每月分区如下:
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
【问题讨论】:
-
您必须删除您的聚集索引并使用
on partition Logs_PartitionScheme子句重新添加它 -
什么聚集索引?我在主键 (
Id) 字段上有一个 - 那个? -
是的...主键可能是 s/b 集群...并且任何使用主键或分区列的索引也需要将
on partition...添加到索引中。 -
对不起,我仍然在努力让它工作!我无法删除并重新添加聚集索引,因为它是主键的一部分。我尝试将主键重新添加为非聚集,然后创建一个聚集索引,如
CREATE CLUSTERED INDEX IX_Logs_ParentEntityId_DateTime ON dbo.Logs ( ParentEntityId, [DateTime] ) PARTITION Logs_PartitionScheme,但我得到:>'PARTITION' 附近的语法不正确。
标签: sql-server tsql partition