我们在SQL Server 2005数据库中已经意识到某些外键没有On Delete Cascade属性集,当我们尝试删除一些记录时,它会给我们一些参考错误。
使用我编写DROP
和CREATE
SQL脚本的Management Studio,但似乎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]
和CREATE
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中的删除规则设置为Set Null
。
它正确删除,并重新创建没有错误。
如果我回到GUI,它仍然显示Set Null
作为删除规则。
我做错了吗?或者是否有另一种方法来编辑约束以添加ON DELETE CASCADE
规则?
答案 0 :(得分:7)
您的方法看起来是正确的。 ALTER TABLE
是编辑约束的唯一方法。也许Management Studio需要数据刷新。尝试右键单击“刷新”,或关闭应用程序并重新打开它。