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