2010-04-07 167 views
4

我試圖在一個數據庫表中刪除一個約束,像這樣:無法在SQL Server 2005中下降的約束。「無法刪除約束請參見前面的錯誤」

ALTER TABLE MyTable drop CONSTRAINT FK_MyTable_AnotherTable 

但執行剛剛運行,運行。如果我停止它,我看到:

Msg 3727, Level 16, State 0, Line 2 
Could not drop constraint. See previous errors. 

網絡搜索拋出了不同的頁面,但請注意,約束正確命名,我試圖用正確的名稱

+0

什麼是以前的錯誤? – 2010-04-07 14:31:21

回答

2

找到一種方法來排序,雖然我不明白爲什麼它是必要的。

已經能夠先禁用它刪除約束:

ALTER MyTable NOCHECK CONSTRAINT FK_MyTable_AnotherTable 

然後滴完成精細

仍然會歡迎的原因有任何意見,爲什麼這是必要的

+0

我想刪除既不是主鍵也不是外鍵的列,我遇到了同樣的錯誤,我嘗試了您的解決方案,但它沒有工作。有任何想法嗎 ? – 2014-05-29 07:40:57

1

將其刪除確認您還沒有已經下降的約束,如:

SELECT OBJECT_ID('FK_MyTable_AnotherTable') 

如果返回null,你的約束不復存在。這將解釋錯誤消息。

+0

沒有約束尚未被刪除,我已經試過你的方法以及其他人,它肯定還存在。它也將阻止我刪除相關的列 – DannykPowell 2010-04-07 14:24:57

+0

@DannykPowell:'object_id('FK_MyTable_AnotherTable','F')'顯示什麼? – Andomar 2010-04-07 14:33:08

+0

看到我的答案,首先通過禁用約束進行排序 - 感謝您的回答@Andomar – DannykPowell 2010-04-07 14:54:43

1

我在SQL Server 2008 R2上有同樣的問題,我解決了我的問題與下線,希望它會爲別人工作:)

Alter Table [Table Name] 
    DROP Column [Column Name] 
+0

我可以知道給我答案-1的原因嗎?如果你糾正我,我會很高興。 – 2014-05-29 09:35:15

+2

我希望你已經爲你的原因得到了答案。我不認爲線程所有者想要刪除任何列,他只想刪除外鍵(也許更改列定義) – NPC 2016-08-19 12:28:42

0

我有同樣的問題。

原因是我在我的遊標語句中犯了一個錯誤,它正在迭代我要丟棄的一些約束。 因此,當約束實際上在同一事務中刪除時發生此錯誤。然後我做了回滾並檢查它是否存在:它確實(當然,在回滾之後!)。

檢查下降時是否真的存在。