Bonjour à tous,
je vous solicite, car j'ai un petit soucis.
Je vais préciser un peu ce que je veux faire ça sera plus simple je pense
J'ai 3 tables :
- la table A
- la table B : elle fait référence à la clé primaire de A (ON DELETE CASCADE)
- la table C : elle fait référence à la clé primaire de A (ON DELETE CASCADE), de plus elle fait référence à la clé primaire de B (ON DELETE SET NULL)
La 2ème contrainte de C est importante, car on pourrait très bien supprimer un tuple de B sans avoir supprimé quoi que ce soit à A. Cependant en cas de suppression au niveau de A, C reçoit alors l'ordre de SET NULL et DELETE ... on ne sait ni lequel arrive en premier ni comment gérer l'un ou l'autre.
Au vue de la doc à ce sujet pas de surprise sauf que sémantiquement ce que je fais est juste : existe-t-il une façon de contourner ce problème ? en priorisant les contraintes les unes par rapport aux autres (ce que je ne sais évidemment pas faire) ?
J'obtiens donc l'erreur suivante (je travaille sur VS 2008 en C++ et j'utilise OLE DB, donc désolé si vous n'êtes pas habitués à ce genre de trace) :
(dans le trace le table 'note' est la table C dans mon explication)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 OLE DB Error Record dump for hr = 0x80040e14 Row #: 0 Source: "Microsoft OLE DB Provider for SQL Server" Description: "Could not create constraint. See previous errors." Help File: "(null)" Help Context: 0 GUID: {0C733A63-2A1C-11CE-ADE5-00AA0044773D} Row #: 1 Source: "Microsoft OLE DB Provider for SQL Server" Description: "Introducing FOREIGN KEY constraint 'FK__note__idUtilisat__73501C2F' on table 'note' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints." Help File: "(null)" Help Context: 0 GUID: {0C733A63-2A1C-11CE-ADE5-00AA0044773D} OLE DB Error Record dump end
Merci d'avance pour votre aide![]()
Partager