【问题标题】:How does one Add a Partition to an Existing Table?如何将分区添加到现有表?
【发布时间】: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


【解决方案1】:

要创建新分区,请将下一个使用的文件组的分区方案设置为所需的分区方案,并 SPLIT 函数为该文件组上的数据创建新的分区边界。例如:

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

【讨论】:

  • 我将在问题中包含Logs_PartitionSchemeMonthlyPartition 的定义。我不认为这段代码能满足我的需要(即将方案或函数添加到表中)。
猜你喜欢
  • 1970-01-01
  • 2014-10-19
  • 2017-03-27
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2021-04-04
  • 2017-08-07
  • 1970-01-01
相关资源
最近更新 更多