如何删除表分区

use*_*148 4 sql-server partitioning sql-server-2012

我想从 SQL Server 2012 数据库中的表中删除分区。表有主键,但分区列不是主键。我还想保持数据结构和模式完好无损。

我试过:

select * 
into [dbo].[new_Non_partitioned_Table] 
from [dbo].[partitioned_table]
Run Code Online (Sandbox Code Playgroud)

然后我删除了分区表并重命名了新表。但是,它导致我丢失了数据结构和一些迫使我放弃约束的依赖项 (FK)。这是用于生产和数据丢失不是一种选择。

有没有更好的方法从现有表中删除分区?

Tho*_*ser 6

将表上的索引重建到文件组而不是分区模式。

请按以下顺序执行此操作:

  • CREATE INDEX ON [MyFileGroup] WITH DROP EXISTING 在集群索引上
  • CREATE INDEX ON [MyFileGroup] WITH DROP EXISTING 在所有非聚集索引上(一次一个)

如果您可以停机,请考虑先编写脚本并删除非聚簇索引,重建聚簇索引,然后重新应用非聚簇索引(针对文件组,当然不是分区模式)

这比将分区合并在一起更快,因为它可以使用 SQL Server 索引构建引擎以高并发运行。

使用这个技巧,模式保持原位,无需将其全部移动到另一个表。根据您的 SQL Server 版本,您甚至可以在线执行此操作。