How to Remove Table Partitioning in SQL Server
In this article we will see how we can remove partitions from a table in a database in SQL server. In my previous post i had demonstrated how we can partition a table via T-SQL. Lets now remove the partitions and merge the data in a single partition. I will start from where we left off in my previous post of partitioning a table.
1) Run the below code to create a database named PartitionDB that would include a table that has been partitioned.
USE master GO CREATE DATABASE PartitionDB ON PRIMARY (NAME = N'PartitionDB' ,FILENAME = N'D:\MSSQL\Data\PartitionDB.mdf' ,SIZE = 50MB, FILEGROWTH = 150MB) LOG ON ( NAME = N'PartitionDB_log' ,FILENAME = N'D:\MSSQL\Logs\PartitionDB_log.ldf' ,SIZE = 10MB, FILEGROWTH = 100MB); GO ALTER DATABASE PartitionDB ADD FILEGROUP PartitionFG1; GO ALTER DATABASE PartitionDB ADD FILEGROUP PartitionFG2; GO ALTER DATABASE PartitionDB ADD FILEGROUP PartitionFG3; GO ALTER DATABASE PartitionDB ADD FILEGROUP PartitionFG4; GO ALTER DATABASE PartitionDB ADD FILE ( NAME = PartitionFile1, FILENAME = 'D:\MSSQL\Data\PartitionFile1.ndf', SIZE = 20MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) TO FILEGROUP PartitionFG1; GO ALTER DATABASE PartitionDB ADD FILE ( NAME = PartitionFile2, FILENAME = 'D:\MSSQL\Data\PartitionFile2.ndf', SIZE = 20MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) TO FILEGROUP PartitionFG2; GO ALTER DATABASE PartitionDB ADD FILE ( NAME = PartitionFile3, FILENAME = 'D:\MSSQL\Data\PartitionFile3.ndf', SIZE = 20MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) TO FILEGROUP PartitionFG3; GO ALTER DATABASE PartitionDB ADD FILE ( NAME = PartitionFile4, FILENAME = 'D:\MSSQL\Data\PartitionFile4.ndf', SIZE = 20MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) TO FILEGROUP PartitionFG4; GO CREATE PARTITION FUNCTION PartFunc1 (int) AS RANGE LEFT FOR VALUES (10, 20, 30); GO CREATE PARTITION SCHEME PartScheme1 AS PARTITION PartFunc1 TO (PartitionFG1, PartitionFG2,PartitionFG3,PartitionFG4); GO USE [PartitionDB] GO CREATE TABLE PartitionTable ( MyID int NOT NULL, MyDate datetime NULL, Name varchar(50) NULL ) ON PartScheme1(MyID) GO USE PartitionDB go CREATE UNIQUE CLUSTERED INDEX IX_PartitionTable ON PartitionTable(MyID) ON PartScheme1 (MyID); GO USE PartitionDB go INSERT INTO PartitionTable (MyID, MyDate,name) VALUES (1,GETDATE(),'Rooney'); INSERT INTO PartitionTable (MyID, MyDate,name) VALUES (11,GETDATE(),'Van persie'); INSERT INTO PartitionTable (MyID, MyDate,name) VALUES (22,GETDATE(),'De Gea'); INSERT INTO PartitionTable (MyID, MyDate,name) VALUES (34,GETDATE(),'Moyes'); GO
Run the below code to see the details of the partitioned table
USE PartitionDB GO SELECT OBJECT_NAME(idx.object_id) AS TableName , psh.name AS PartitionSchemeName , fnc.name AS PartitionFunctionName, part.partition_number AS PartitionNumber , fg.name AS [Filegroup], rows AS 'No of Records' , CASE boundary_value_on_right WHEN 1 THEN 'less than' ELSE 'less than or equal to' END AS 'Condition', value AS 'Range' , part.partition_id AS [Partition Id] FROM sys.partitions part JOIN sys.indexes idx ON part.object_id = idx.object_id AND part.index_id = idx.index_id JOIN sys.partition_schemes psh ON psh.data_space_id = idx.data_space_id JOIN sys.partition_functions fnc ON fnc.function_id = psh.function_id LEFT JOIN sys.partition_range_values prv ON fnc.function_id = prv.function_id AND part.partition_number = prv.boundary_id JOIN sys.destination_data_spaces dds ON dds.partition_scheme_id = psh.data_space_id AND dds.destination_id = part.partition_number JOIN sys.filegroups fg ON dds.data_space_id = fg.data_space_id JOIN (SELECT container_id, sum(total_pages) as total_pages FROM sys.allocation_units GROUP BY container_id) AS au ON au.container_id = part.partition_id JOIN sys.tables t ON part.object_id = t.object_id WHERE idx.index_id < 2 ORDER BY TableName,part.partition_number; GO
Now let us understand how we can remove the partitions from this table. The easiest way to do this is to drop the Clustered index from this table and recreate it on another filegroup.
Step 1: Drop the clustered index from the table
USE [PartitionDB] GO DROP INDEX [IX_PartitionTable] ON [dbo].[PartitionTable] WITH ( ONLINE = OFF ) GO
Step 2: Re-create the clustered index on another Filegroup. We will use the primary FG as example
USE [PartitionDB] GO CREATE UNIQUE CLUSTERED INDEX [IX_PartitionTable] ON [dbo].[PartitionTable] ( [MyID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO
Step 3: Verify the state of the partitions by running the below code. You will find that there is only one partition with all the 4 rows in it.
USE PartitionDB
go
SELECT
*
FROM
sys.partitions
WHERE
OBJECT_NAME(OBJECT_ID)=
'partitiontable'
;
GO

Step 1: Right click on the table
Step 2: Click on properties
Step 3: Click on Storage
Step 4 : Verify that “Table is partitioned” is false.

I hope this article was helpful in understanding how we can remove Partitioning from table.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!