【问题标题】:SQL Server Foreign Key "On Delete Set Null " constraint not workingSQL Server 外键“On Delete Set Null”约束不起作用
【发布时间】:2011-06-15 06:52:44
【问题描述】:

我正在使用带有 mmse 的 sql server express 2008。 我已经在表之间设置了一个外键约束,并将删除约束设置为“设置为空”。 但是它似乎没有强制执行约束,我在现在删除的行的字段中留下了 ID。

这是一个小的screen shot 我是如何设置的

我哪里出错了?

Table 1Table 2

【问题讨论】:

  • 你只是设置了这个吗?如果是这样,您是否在 SSMS 中按保存?如果 FK 约束给您留下孤立的行,则似乎必须禁用或根本不存在 FK 约束。否则你可以为所涉及的两个表编写完整的 DDL 脚本吗?
  • 是的。我已经保存并使用了 VStudio,并且架构已传递给 Designer。但它仍然无法正常工作。我是在 SSMS 中删除还是通过 VStudio 以编程方式删除。
  • 您能否为两个表(包括 FK 定义)编写 DDL 脚本并将其添加到您的问题中?
  • 谢谢。表格现已添加到帖子中
  • 以上链接(屏幕截图或两个代码 sn-ps)都不再起作用了。

标签: null constraints sql-server-express foreign-key-relationship cascading-deletes


【解决方案1】:

您发布的 DDL 对我来说很好。

declare @id int;
INSERT INTO DeliveryAreas(Description,Rate) VALUES ('To Delete', 100)
set @id=SCOPE_IDENTITY()
INSERT INTO Customer(FName,DeliveryAreaID) VALUES ('Test',@id)
SELECT ID,FName,DeliveryAreaID FROM Customer
DELETE FROM DeliveryAreas WHERE ID=@id
SELECT ID,FName,DeliveryAreaID FROM Customer

返回

ID          FName                          DeliveryAreaID
----------- ------------------------------ --------------
1           Test                           3


ID          FName                          DeliveryAreaID
----------- ------------------------------ --------------
1           Test                           NULL

你能仔细检查一下你的启用状态吗?

SELECT is_disabled,* FROM sys.foreign_keys where name='FK_Customer_DeliveryAreas'

【讨论】:

  • 谢谢,太好了。它现在似乎工作完美。我不知道以前是什么问题。我没有改变任何东西,但感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2019-04-02
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多