在企业管理器中更新SQL表 - 外键问题

时间:2010-09-18 20:59:59

标签: sql sql-server foreign-keys enterprise-manager

我有一堆包含大量FK的表。

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

我的问题是我忘了几栏,我需要添加它们。我可以通过右键单击表并选择“设计”来添加它们,但如果我想将它们设为NOT NULL或删除列,则不能添加它们。我也可以生成一个Drop / Create Script,但是我得到了这个错误:

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是否仍然在另一个表上被引用?

1 个答案:

答案 0 :(得分:4)

触发错误的约束 不在dbo.SellVehicles ;它位于引用 dbo.SellVehicles表的表上。对Color,Make和Model表的引用不是问题 - 您试图以父子关系删除/删除子项。

我怀疑你在ALTER TABLE ... DROP CONSTRAINT ...之前存在的约束是否存在。

在SSMS中,您可以右键单击表格,然后选择“依赖关系”。有一个单选按钮可以选择查看依赖于dbo.SellVehicles表的对象,或dbo.SellVehicles表所依赖的对象。