使用ON DELETE CASCADE更新外键约束不起作用?

5
我们在SQL Server 2005数据库中发现一些外键没有设置On Delete Cascade属性,这在我们尝试删除某些记录时会导致一些引用错误。
使用管理工具我编写了DROP和CREATE SQL语句,但似乎CREATE并没有正确执行。
DROP语句如下:
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”。 它成功地被删除,并且重新创建没有错误。 如果我回到GUI中,它仍然显示“Set Null”作为删除规则。
我做错了什么吗?还是有其他方法可以编辑约束以添加“ON DELETE CASCADE”规则?
1个回答

7
您的方法看起来是正确的。 ALTER TABLE 是编辑约束的唯一方法。可能需要对 Management Studio 进行数据刷新。请尝试右键单击“刷新”,或关闭应用程序并重新打开它。

1
是的,这就是问题所在。由于某种原因,管理工具仍然显示旧值。我不得不关闭应用程序并重新启动它,才能显示更改。谢谢! - Alastair Pitts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接