2010-09-18 99 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