sql - 使用 ON DELETE CASCADE 更新外键约束未更新?

标签 sql sql-server

我们在 SQL Server 2005 数据库中意识到,某些外键没有设置“删除级联”属性,这在我们尝试删除某些记录时会出现一些引用错误。

使用 Management Studio 我编写了 DROPCREATESQL 脚本,但 CREATE 似乎无法正常工作。

删除:

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 中手动更改“删除时”的值,则在删除并重新创建后,“删除时”不会正确更新。

作为测试,我将 GUI 中的删除规则设置为Set Null。 它正确删除,并重新创建,没有错误。 如果我回到 GUI,它仍然显示 Set Null 作为删除规则。

我是不是做错了什么?或者是否有另一种方法来编辑约束以添加 ON DELETE CASCADE 规则?

最佳答案

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

关于sql - 使用 ON DELETE CASCADE 更新外键约束未更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2727076/

相关文章:

python - Django SQL get查询返回一个<key, value> hashmap,如何访问该值?

php - 从 1 个用户的 MySQL 表中选择多行

Javascript 变量存入 SQL 数据库?

php - 如果应使用某个字段,则保存 - SQL

SQL Server - 按所有组返回的记录数进行聚合

java - JDBC 连接抛出 SocketException

sql - Oracle SQL与Oracle PL/SQL

sql-server - 从 SQL 管理工作室连接到 Azure DB 失败 MSSQLSERVER_10060

sql-server - 表中的所有列都将 SQL 字符串化

java - 使用 JPA 2.1 注释调用 SQL Server 存储过程