可能會導致循環或多重級聯路徑。請指定 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(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中,也不用設置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM