2017-04-21 1178 views
13

我試圖做到這一點:ALTER TABLE DROP COLUMN失敗,因爲一個或多個對象訪問此列

ALTER TABLE CompanyTransactions DROP COLUMN Created 

但我得到這個:

消息5074,級別16,狀態1,第2行 對象'DF__CompanyTr__Creat__0CDAE408'依賴於'Created'列。 消息4922,級別16,狀態9,行2 ALTER TABLE DROP COLUMN創建失敗,因爲一個或多個對象訪問此列。

這是代碼第一個表。不知怎的,遷移已經全部搞砸了,我正在嘗試手動回滾一些已更改的內容。

沒有知道這是什麼:

DF__CompanyTr__Creat__0CDAE408 

回答

24

您必須在刪除列之前從列constraints。您引用的名稱是default constraint

例如

alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408]; 
alter table CompanyTransactions drop column [Created]; 
+5

令人沮喪的是Entity Framework沒有爲我們處理這個問題。 – chakeda

+0

@ chakeda我同意 – SqlZim

2

@ SqlZim的答案是正確的,只是爲了解釋爲什麼可能發生這種情況。我有類似的問題,這是由很無辜的事情引起的:將默認值列

ALTER TABLE MySchema.MyTable ADD 
    MyColumn int DEFAULT NULL; 

但在MS SQL服務器的境界上科拉姆的默認值是一種約束。像每個約束都有一個標識符。如果它在CONSTRAINT中使用,則不能刪除列。

那麼你實際上可以做避免這種問題總是給你的默認約束明確的名稱,例如:

ALTER TABLE MySchema.MyTable ADD 
    MyColumn int NULL, 
    CONSTRAINT DF_MyTable_MyColumn DEFAULT NULL FOR MyColumn; 

你仍然有下探的列之前刪除約束,但你至少會知道它的名字

相關問題