2010-09-18 95 views
0

我有一大堆FK表。更新企業管理器中的SQL表 - 外鍵問題

Table Vehicles 
----------- 
ColorID -> Color.ID 
MakeID -> Make.ID 
ModelID -> Model.ID 
etc... 

我的問題是我忘了幾列,我需要添加它們。我可以通過右鍵單擊表格並選擇「設計」來添加它們,但是如果我想使它們不爲NULL或刪除列,則不能。我還可以生成一個Drop /創建腳本,但我得到這個錯誤:

Msg 3726, Level 16, State 1, Line 4 
Could not drop object 'dbo.SellVehicles' because it is referenced by a FOREIGN KEY constraint. 

我是否需要辦理,並刪除每個FK跌得/創建,然後回加或者是有一個快速/無痛這樣做的方式?有沒有辦法快速刪除並重新創建這些FK?

爲什麼不

IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_SellVehicles_Conditions]') AND parent_object_id = OBJECT_ID(N'[dbo].[SellVehicles]')) 
ALTER TABLE [dbo].[SellVehicles] DROP CONSTRAINT [FK_SellVehicles_Conditions] 
GO 

消除這個錯誤? FK是否仍在另一張桌子上被引用?

回答

4

被觸發錯誤的約束是不在dbo.SellVehicles;它在參考dbo.SellVehicles表。對Color,Make和Model表格的引用不是問題 - 您試圖在父子關係中刪除/刪除該孩子。

我懷疑您在ALTER TABLE ... DROP CONSTRAINT ...之前存在的測試約束。

在SSMS中,您可以右鍵單擊一個表格,然後選擇「依賴關係」。有一個單選按鈕可以選擇查看依賴於dbo.SellVehicles表的對象,或者dbo.SellVehicles表依賴的對象。

+0

@ Blankasaurus:是的,你必須刪除/禁用對'dbo.SellVehicles'表的依賴,然後才能刪除它。 – 2010-09-18 21:28:50

+0

這是在父表上引用我試圖修改的表的FK限制。因此,假設我有20個依賴關係,是否有一種快速生成腳本的方法,可以根據我試圖修改的表來刪除/創建這些表上的所有FK? – Jason 2010-09-18 21:31:30

+0

禁用...是否「強制FK禁忌」=否? – Jason 2010-09-18 21:33:49