[ms sql serveur] on delete cascade

Contenu du snippet

Bonjour a tous,

Je pense que ce p'tit exemple pourrait servir a plusieurs d'entre vous !

Il s'agit de faire du delete on cascade ou plus exactement
de supprimer des enregistrements presents dans une table (EX : Tcivilites)
qui est en relation avec une autre (EX : Tpersonnes) par une foreign key
place dans la table Tpersonnes.

Si je supprime une ligne de la table Tcivilites et que j'ai une reference qui pointe sur la table
Tpersonnes je vais bien sur avoir un message d'erreur du sgdbr !

Pour remedier a cela, utilisez le on delete cascade qui est bien pratique !
Donc si je supprime une ligne de la table Tcivilites et que je retrouve
sa reference dans la table Tpersonnes il me supprimera toutes les lignes correspondantes !

Voila suffit de copier coller le script dans l'analyseur de requete et le tour est joue.

Source / Exemple :


/** Les tables pour l'exemple **/ 

create table Tcivilites
(
ID int not null primary key identity,
sexe varchar(20)

)
GO	

create table Tpersonnes
(
ID int not null primary key identity,
nom varchar(50),
prenom varchar(50),
fkcivilite int foreign key references Tcivilites(ID) on delete cascade 

)

Go

/** Quelques donnees pour la table Tcivilites **/
insert into Tcivilites(sexe) values('Madame') 
insert into Tcivilites(sexe) values('Mademoiselle')
insert into Tcivilites(sexe) values('Monsieur')

/** Donnes pour la table Tcategories **/

insert into Tpersonnes(nom, prenom, fkcivilite) values('BERNARD','Christophe',3)
insert into Tpersonnes(nom, prenom, fkcivilite) values('Thunissen','Marc',2)
insert into Tpersonnes(nom, prenom, fkcivilite) values('RIOLO','Francis',2)

/** Supprimons une ligne de la table Tcivilites 

    • et nous verrons que les donnees contenues dans la table
    • Tpersonnes seront bien supprimees aussi
    • /
DELETE from Tcivilites where ID = primarykey_Tcivilite

Conclusion :


Voila, pour ceux qui ont deja un schema de DB cree, il faut commencer par supprimer
la constrainte de foreign key cree (ALTER TABLE NomDB DROP CONSTRAINT NomContrainte)
et recree une nouvelle contrainte (ALTER TABLE NomDB ADD CONSTRAINT ..) avec l'option on delete cascade .

Pour ceux qui utilise plus souvent que moi Ms sql serveur, serait il possible de faire la même chose
avec un trigger !?Merci !

Bon week end..
Christophe
Un bouillonnais..

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.