2015-09-17 105 views
1

我已閱讀了很多帖子,但沒有任何工作。刪除一列看不見的約束

我試圖默認值添加到列如下:

 AlterColumn("dbo.BusinessUnit_Map", "RelationshipType", c => c.String(nullable: false, defaultValue: "RollsUpTo")); 

這將產生錯誤:

The object 'DF_dbo.BusinessUnit_Map_RelationshipType' is dependent on column 'RelationshipType'. ALTER TABLE ALTER COLUMN RelationshipType failed because one or more objects access this column.

我不能在任何地方找到這個約束。以下是顯示錶格中唯一默認約束的屏幕截圖。

enter image description here

一個有趣的事情是,如果我嘗試刪除列並重新添加它,工作正常。只有當我使用AlterColumn時,它纔會失敗。

我已經試過下降這樣的約束:

  Sql("ALTER TABLE dbo.BusinessUnit_Map DROP CONSTRAINT DF_dbo.BusinessUnit_Map_RelationshipType"); 

.是一個語法錯誤,所以我有三個下劃線代替它:

  Sql("ALTER TABLE dbo.BusinessUnit_Map DROP CONSTRAINT DF_dbo___BusinessUnit_Map_RelationshipType"); 

但系統響應

'DF_dbo___BusinessUnit_Map_RelationshipType' is not a constraint. Could not drop constraint. See previous errors.

這個約束在哪裏?我怎麼把它關掉?

更新

一個建議是嘗試此查詢來搜索約束:

select o.type_desc,o2.name as parent_name,* from sys.objects as o 
left join sys.objects as o2 on o.parent_object_id=o2.object_id 
where o.name='DF_dbo.BusinessUnit_Map_RelationshipType' 

這個返回結果爲零,所以我修改了它,看看它會告訴我有關BusinessUnit_Map

select o.type_desc,o2.name as parent_name,* from sys.objects as o 
left join sys.objects as o2 on o.parent_object_id=o2.object_id 
where o2.name='BusinessUnit_Map' 

此查詢的結果如下所示,它們不包含神祕利弊traint。

enter image description here

回答

0

編輯:

使用這個命令,你會發現對象名稱:

select o.type_desc,o2.name as parent_name,* from sys.objects as o 
left join sys.objects as o2 on o.parent_object_id=o2.object_id 
where o.name='DF_dbo.BusinessUnit_Map_RelationshipType' 

看那列 「type_desc」 如果真的是一個默認的限制。列「parent_name」應該告訴你這個綁定表的名字。

希望你會發現你的 「無形約束」 :-)

- 舊文本

用方括號試試吧。點,空格和其他「破」鍵不是一個名字通常允許範圍內?

Sql("ALTER TABLE dbo.BusinessUnit_Map DROP CONSTRAINT [DF_dbo.BusinessUnit_Map_RelationshipType]"); 
+0

同樣的錯誤,而不是約束:( – Samo

+0

@Samo,你可以用SQL直接(SSMS)太 – Shnugo

+0

@Samo工作,編輯我的答案...您會在那裏找到一個語句,它將爲您帶來名稱爲'DF_dbo.BusinessUnit_Map_RelationshipType'的對象的詳細信息' – Shnugo