錯誤提示:可能會導致迴圈或多重級聯路徑。請指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 約束。 原因:自表連接(同一張表自己連接自己)不允許級聯刪除和級聯更新。 一、sql語句 二、發現 內容如下: USE [Ecolo ...
錯誤提示:可能會導致迴圈或多重級聯路徑。請指定 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中,也不用設置。