Bonjour à tous.

Mon problème est le suivant, j'aimerais créer une série de triggers me permettant de faire des suppressions en cascade.

J'entend par là que si je supprime un enregistrement dans une table il ira voir dans là table que je lui aurai indiqué si il n'existe pas d'enregistrement ayant une foreign key de valeur identique à l'enregistrement supprimé.

Pour prendre un petit exemple très simple j'aurais trois tables : Père, Mère et Fils. Si j'essaie de supprimer un enregistrement dans la table Père, un trigger se déclenche et cherche dans la table Fils pour voir si il existe des enregistrement ayant comme valeur de foreign key vers Père égale à l'identifiant Père de l'enregistrement que je veux supprimer et dans ce cas, il supprime ces enregistrements pour finir par supprimer l'enregistrement de Père.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
create table FILS (
   FILS_AUTO            numeric              identity,
   PERE_AUTO            numeric              not null,
   MERE_AUTO            numeric              not null,
   FILS_NOM             varchar(60)          not null,
   constraint PK_FILS primary key (FILS_AUTO)
)
go
 
create table MERE (
   MERE_AUTO            numeric              identity,
   MERE_NOM             varchar(60)          not null,
   constraint PK_MERE primary key (MERE_AUTO)
)
go
 
create table PERE (
   PERE_AUTO            numeric              identity,
   PERE_NOM             varchar(60)          not null,
   constraint PK_PERE primary key (PERE_AUTO)
)
go
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create procedure Procedure_Cascade_Fils_Pere
	@fk_name numeric
as
	begin	
		delete from Fils
		where Pere_Auto = @fk_name
	end
go
 
create procedure Procedure_Cascade_Fils_Mere
	@fk_name numeric
as
	begin	
		delete from Fils
		where Mere_Auto = @fk_name
	end
go
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
create trigger Mere_Cascade on Mere
for delete
as 
	declare @fk_mere_name numeric
	set @fk_mere_name = old.Mere_Auto
	begin
		exec Procedure_Cascade_Fils_Mere @fk_mere_name
	end
go
Le problème avec mon trigger est que je ne parviens pas à récupérer la valeur de l'identifiant de l'enregistrement que je veux supprimer, ce qui m'empêche de lancer ma procédure stockée.

Si quelqu'un pouvait me venir en aide en me disant si ce que je souhaite faire est possible et si oui comment. Sinon, en me disant si il y aurait moyen de parvenir au même résultat avec une autre méthode.

Merci d'avance.