OVH Cloud OVH Cloud

Référence circulaire

1 réponse
Avatar
Alaino
Bonjour,
J'ai une table equipement ou des équipements doivent pouvoir faire
référence à équipements maîtres. Quand on modifie l'ID d'un équipement maître
il faudrait modifier automatiquement la relation dans l'équipement enfant.
Mais quand j'ajoute "on update cascade" dans la relation SQL Server 2005 me
donne le message suivant

Introducing FOREIGN KEY constraint 'EquipmentMaster' on table 'Equipment'
may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON
UPDATE NO ACTION, or modify other FOREIGN KEY constraints.


CREATE TABLE "dbo"."Equipment"
(
"ID" IDType NOT NULL,
"IDEqMaster" IDType NULL,
PRIMARY KEY ("ID")
)
go

ALTER TABLE "dbo"."Equipment"
ADD CONSTRAINT "EquipmentMaster" FOREIGN KEY ("IDEqMaster")
REFERENCES "dbo"."Equipment" ("ID") on update cascade
go

1 réponse

Avatar
Christian Robert
Bonjour,

Du fait que vous utilisez des relations types parent-enfant nécessairement,
il y a un risque de récursivité, SQL Server ne maitrise pas ce genre de
comportement et limite celà à 32 niveau maxi, cependant dans le cas d'une
mise à jour en cascade celà est interdit...

Résultat il vous faudra écrire votre propre Trigger si vous souhaitez faire
ce genre de mise à jour et à l'aide d'une boucle WHILE par exemple.

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"Alaino" a écrit :

Bonjour,
J'ai une table equipement ou des équipements doivent pouvoir faire
référence à équipements maîtres. Quand on modifie l'ID d'un équipement maître
il faudrait modifier automatiquement la relation dans l'équipement enfant.
Mais quand j'ajoute "on update cascade" dans la relation SQL Server 2005 me
donne le message suivant

Introducing FOREIGN KEY constraint 'EquipmentMaster' on table 'Equipment'
may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON
UPDATE NO ACTION, or modify other FOREIGN KEY constraints.


CREATE TABLE "dbo"."Equipment"
(
"ID" IDType NOT NULL,
"IDEqMaster" IDType NULL,
PRIMARY KEY ("ID")
)
go

ALTER TABLE "dbo"."Equipment"
ADD CONSTRAINT "EquipmentMaster" FOREIGN KEY ("IDEqMaster")
REFERENCES "dbo"."Equipment" ("ID") on update cascade
go