代码之家  ›  专栏  ›  技术社区  ›  Alastair Pitts

是否使用“删除时层叠”更新外键约束未更新?

  •  5
  • Alastair Pitts  · 技术社区  · 15 年前

    在sqlserver2005db中,我们已经意识到一些外键没有设置on delete cascade属性,这在尝试删除某些记录时会导致一些引用错误。

    使用我编写的管理工作室 DROP CREATE SQL的,但似乎 创造 工作不正常。

    这个 跌落 :

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

    以及 创造

    USE [FootprintReports]
    GO
    ALTER TABLE [dbo].[_SUBSCRIPTIONS]  WITH CHECK ADD  CONSTRAINT [FK__SUBSCRIPTIONS_Reports] FOREIGN KEY([PARAMETER_ReportID])
    REFERENCES [dbo].[Reports] ([ID])
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[_SUBSCRIPTIONS] CHECK CONSTRAINT [FK__SUBSCRIPTIONS_Reports]
    

    如果我在gui中手动更改on delete的值,则在删除并重新创建之后,on delete不会正确更新。

    作为测试,我在gui中将delete规则设置为 Set Null . 它正确地下降,并重新创建没有错误。 如果我回到图形用户界面,它仍然显示 置空 作为删除规则。

    我做错什么了吗?或者有其他方法来编辑约束以添加 ON DELETE CASCADE 规则?

    1 回复  |  直到 15 年前
        1
  •  7
  •   Anthony Faull    15 年前

    你的方法看起来是正确的。 ALTER TABLE 是编辑约束的唯一方法。也许management studio需要数据刷新。尝试右键单击“刷新”,或关闭应用程序并重新打开它。