已建立分區表 (Partitioned Table) 需移除分區功能,回歸普通堆疊表或叢集索引表,**資料完全保留**。
分區表本質是將資料水平切分到多個檔案群組。轉換為普通表 = **合併所有分區到單一檔案群組**,並移除分區函數/配置綁定。
-- 1. 建立目標檔案群組 (若無) 或使用 PRIMARY
-- ALTER DATABASE MyDB ADD FILEGROUP FG_Standard;
-- ALTER DATABASE MyDB ADD FILE (NAME='FG_Standard', FILENAME='...') TO FILEGROUP FG_Standard;
-- 2. 移除分區配置綁定 (將所有資料移到單一 FG)
ALTER TABLE dbo.PartitionedTable
DROP CONSTRAINT PK_PartitionedTable -- 若 PK 含分區欄位需先刪除
WITH (MOVE TO FG_Standard); -- 關鍵:MOVE TO 指定目標 FG
-- 3. 重建索引/主鍵到標準 FG
ALTER TABLE dbo.PartitionedTable
ADD CONSTRAINT PK_PartitionedTable PRIMARY KEY (Id) ON FG_Standard;
-- 4. (選擇性) 刪除分區函數/配置 (若無其他表使用)
DROP PARTITION SCHEME MyPartitionScheme;
DROP PARTITION FUNCTION MyPartitionFunction;
MOVE TO FG_Standard 會觸發資料移動,**資料不會刪除**,只是重新分配頁面。SELECT
t.name AS TableName,
p.partition_number,
fg.name AS FileGroupName,
p.rows
FROM sys.tables t
JOIN sys.partitions p ON t.object_id = p.object_id
JOIN sys.allocation_units au ON p.hobt_id = au.container_id
JOIN sys.filegroups fg ON au.data_space_id = fg.data_space_id
WHERE t.name = 'PartitionedTable';
-- 結果應只有一列 partition_number=1
若不想鎖表太久:
採用 `ALTER TABLE ... MOVE TO` 官方標準路徑最省時、資料零風險;大表可用「建新表複製+重命名」降低鎖定影響。