可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

时间:2023-03-10 03:39:07
可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

错误提示:可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

原因:自表连接(同一张表自己连接自己)不允许级联删除和级联更新。

一、sql语句

create table DataClass (
CID nvarchar() not null,
ParentID nvarchar() null,
CNAME nvarchar() not null,
ENAME nvarchar() not null,
DISCRIB nvarchar() null,
DATATYPE smallint null,
constraint PK_DATACLASS primary key (CID)
)
go create unique index IX_DataClass on DataClass (
ENAME ASC
)
go alter table DataClass
drop constraint FK_DataType_self
--报错:可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
--alter table DataClass
-- add constraint FK_DataType_self foreign key (ParentID)
-- references DataClass (CID)
-- on update cascade
--go --改为:
alter table DataClass
add constraint FK_DataType_self foreign key (ParentID)
references DataClass (CID)
on update NO ACTION
go

二、发现

on update NO ACTION 其实可以省略,因为默认有这种机制。

可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

内容如下:

USE [Ecology]
GO

ALTER TABLE [dbo].[DataClass] WITH CHECK ADD CONSTRAINT [FK_DataType_self] FOREIGN KEY([ParentID])
REFERENCES [dbo].[DataClass] ([CID]) 
GO

ALTER TABLE [dbo].[DataClass] CHECK CONSTRAINT [FK_DataType_self]
GO

sqlserver自动省略了 on update NO ACTION


sql约束可以修改为:
alter table DataClass
add constraint FK_DataType_self foreign key (ParentID)
references DataClass (CID)
go

在PowderDesigner中,也不用设置。

可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。