【问题标题】:SQL Server ON DELETE SET NULL errorSQL Server ON DELETE SET NULL 错误
【发布时间】:2015-03-18 12:54:59
【问题描述】:

在我的数据库中,我有一个地址表,该表用作外键中的主表与其他表(例如客户、员工等...)

这个SQLFiddle 显示了addressescustomers 之间的关系,其中customers 有2 个地址。

目前 FK 设置为 ON DELETE NO ACTION,我开始将它们更改为 ON DELETE SET NULL

这对于大多数只有一个地址列的表来说效果很好。在只有一个地址列的特定表和有多个地址列的所有表上,我收到错误:

消息 1785,第 16 级,状态 1,第 1 行
在表 'customers' 上引入 FOREIGN KEY 约束 'FK_customers_shipping_address' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

消息 1750,第 16 级,状态 1,第 1 行
无法创建约束。查看以前的错误。

如果我没有使用CASCADE,为什么会出现此错误?有没有办法解决它?

【问题讨论】:

  • 错误信息是关于FK_customers_shipping_address,但是,那个约束不在你的SQLFiddle中?
  • @NickyvV 我更新了 SQLFiddle。第二个外键被注释掉。如果取消注释并构建架构,则会显示类似于上述的错误。
  • connect上投票支持此功能。

标签: sql sql-server sql-server-2014


【解决方案1】:

SET NULLCASCADE 在此规则方面的行为方式相同。你不能有“多级联路径”。消息有点不清楚。

这是 SQL Server 引擎的限制。你对此无能为力。自己实现级联逻辑。

【讨论】:

  • 为什么我的表中只有1个地址外键列会出现这个错误?
  • 我想你不明白“多级联路径”是什么意思。这是关于到达同一个“子表”的多条路径,缺少更好的词。如果多条路径可以指向同一行并对其进行修改,SQL Server 目前无法处理级联或设置 null。 (这很可悲。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
相关资源
最近更新 更多