它正由 FOREIGN KEY 條件約束強制執行無法刪除索引,錯誤3723

近日在檢視索引時對幾個重複索引做完整併後欲將多餘的索引刪除時發生3723錯誤,並且無法順利刪除索引。

 

以下簡單LAB說明原因

下圖中我建立兩個資料表叫T1及T2,Schema都相同各有C1 , C2 , C3 等3個欄位。
接下來我們在T2建立FOREIGN KEY將T2.C2欄位關聯至T1.C2的欄位,此時會建立失敗。

 

要解決這問題得先在T1資料表針對C2欄位建立一個索引,這樣T2.C2欄位關聯至T1.C2的欄位才能有參照。
所以下圖我們先將T1.C2的索引建立起來後再來建立FOREIGN KEY。可是下圖中一樣發生建立失敗的訊息。

 

請注意要建立被關聯的欄位索引請務必設成唯一,因此下圖中我將該索引改為Unique後再建立FOREIGN KEY就成功了。

 

完成前面步驟後就可以重現我的問題了,如下圖所示我想Drop [IX_T1_C2]這一個索引時發生3723的錯誤訊息,因此刪不掉該索引。

 

因為該索引有被其他資料表參照導致我們無法順利刪除它。我試著將該FOREIGN KEY改為NOCHECK後再去刪[IX_T1_C2]索引還是發生失敗,如下圖所示。

 

最後在解除FOREIGN KEY後就能成功刪除索引了(如下圖)。

 

因此下次如果遇見3723錯誤訊息的話就先去查看看該Table是否有被其他Table關聯,或該索引有被其他Constraint咬住,一旦找到關聯後就可以解除後再砍掉該索引了。

我是ROCK

rockchang@mails.fju.edu.tw