Sql server 如何将分区添加到现有表中?

Sql server 如何将分区添加到现有表中?,sql-server,tsql,partition,Sql Server,Tsql,Partition,给定一个分区函数(MonthlyPartition(DateTime2)),一个使用该函数的分区方案(Logs\u PartitionScheme),以及一个需要将该分区应用于其[DateTime]字段的表(Logs);如何将分区添加到表中 我试过: ALTER TABLE dbo.Logs ADD PARTITION Logs_PartitionScheme 但只要在我运行它时得到这个: 列、参数或变量#40:找不到数据类型日志_PartitionScheme 我认为这只是在尝试向Logs添

给定一个分区函数(
MonthlyPartition(DateTime2)
),一个使用该函数的分区方案(
Logs\u PartitionScheme
),以及一个需要将该分区应用于其
[DateTime]
字段的表(
Logs
);如何将分区添加到表中

我试过:

ALTER TABLE dbo.Logs
ADD PARTITION Logs_PartitionScheme
但只要在我运行它时得到这个:

列、参数或变量#40:找不到数据类型日志_PartitionScheme

我认为这只是在尝试向
Logs
添加一个名为“PARTITION”的列,其类型为
Logs\u PartitionScheme
。如果我用
MonthlyPartition
替换
Logs\u PartitionScheme
,我也会得到同样的结果

Logs_分区方案如下:

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
每月划分如下:

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

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

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

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

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

您必须删除聚集索引,然后在分区日志上用
重新添加它\u PartitionScheme
第条什么聚集索引?我在主键(
Id
)字段上有一个-那一个?是的…主键可能是s/b聚集的…并且任何使用主键或分区列的索引也需要在分区上添加
。对不起,我仍在努力让它工作!我不能删除并重新添加聚集索引,因为它是主键的一部分。我已尝试将主键重新添加为非聚集索引,然后在dbo.Logs(ParentEntityId,[DateTime])上创建聚集索引,如so
CREATE clustered index IX\u Logs\u ParentEntityId\u DateTime分区日志\u PartitionScheme
但是我得到:>分区附近的语法不正确。你必须删除你的聚集索引,然后在分区日志\u PartitionScheme条款中用
重新添加它什么聚集索引?我在主键(
Id
)字段上有一个-那一个?是的…主键可能是s/b聚集的…并且任何使用主键或分区列的索引也需要在分区上添加
。对不起,我仍在努力让它工作!我不能删除并重新添加聚集索引,因为它是主键的一部分。我已尝试将主键重新添加为非聚集索引,然后在dbo.Logs(ParentEntityId,[DateTime])上创建聚集索引,如so
CREATE clustered index IX\u Logs\u ParentEntityId\u DateTime分区日志\u PartitionScheme
但是我得到:>分区附近的语法不正确。我将在问题中包括
Logs\u PartitionScheme
MonthlyPartition
的定义。我认为这段代码并不能满足我的需要(也就是将方案或函数添加到表中)。我将在问题中包括
Logs\u PartitionScheme
MonthlyPartition
的定义。我认为这段代码并不能满足我的需要(也就是将方案或函数添加到表中)。