星期一, 4月 11, 2022

[SQL] 移除叢集索引

和同事討論時對方提到,叢集索引無法用語法刪除,一定要透過 SSMS GUI 來刪除才行,對於這結論有點意外,因為調整 Table Schema 時一直都是用語法刪除叢集索引,了解同事資料來源出處後才意識到,是指被 Primary Key 或 Unique 條件約束限制的索引,無法透過 drop index 語法直接移除,而是必須使過 alter table drop constraint

建立 tblTable 來進行測試
use tempdb
go

DROP TABLE IF EXISTS tblDemo

CREATE TABLE tblDemo 
(
	PKCol int Primary Key ,
	UniqueCol int UNIQUE(UniqueCol)
)
從 SSMS 上觀察 tblTable 的索引鍵和索引資訊

   [SQL] 移除叢集索引-1

利用 drop index 來刪除叢集索引
DROP INDEX [PK__tblDemo__B178A281BD0D9E71] ON tblDemo 
明確的 DROP INDEX 不允許用於索引 'tblDemo.PK__tblDemo__B178A28183FAA431'。它正由 PRIMARY KEY 條件約束強制執行。

利用 drop index 來刪除 unique 非叢集索引
DROP INDEX UQ__tblDemo__3617A0E74BD6978D ON tblDemo
明確的 DROP INDEX 不允許用於索引 'tblDemo.UQ__tblDemo__3617A0E750A99D25'。它正由 UNIQUE KEY 條件約束強制執行。

直接在 SSMS 上刪除叢集索引並透過 SQL Profile 側錄執行語法

[SQL] 移除叢集索引-2

官方文件上範例

沒有留言:

張貼留言