作者:mobiledu2502874483 | 来源:互联网 | 2023-07-11 19:58
错误提示:可能会导致循环或多重级联路径。请指定ONDELETENOACTION或ONUPDATENOACTION,或修改其他FOREIGNKEY约束。原因:自表连接(同一张
错误提示:可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
原因:自表连接(同一张表自己连接自己)不允许级联删除和级联更新。
一、sql语句
create table DataClass (
CID nvarchar(6) not null,
ParentID nvarchar(6) null,
CNAME nvarchar(50) not null,
ENAME nvarchar(50) not null,
DISCRIB nvarchar(200) 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 其实可以省略,因为默认有这种机制。
内容如下:
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中,也不用设置。