Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[MS SQL SERVEUR] ON DELETE CASCADE


Information sur la source

Catégorie :Trucs & Astuces Classé sous : sql, cascade, contrainte Niveau : Débutant Date de création : 03/06/2006 Vu : 8 776

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

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

  • /** 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
 /** 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..

 

Commentaires et avis

signaler à un administrateur
Commentaire de NeverDie le 06/06/2006 17:10:40

Merci, grâce à ce conseil tout ce fait tout seul :) Je travail avec SQL Server 2005 et je n'ai eu qu'à modifié la valeur de ma foreign_key directement dans l'interface. J'ai fais modifier sur ma foreign_key, puis modifier la valeur supprimer un règle à la valeur cascade.

signaler à un administrateur
Commentaire de Malkuth le 10/06/2006 13:50:04

Pour faire la même chose avec un trigger je pense que ce trigger devrais fonctionner (En supprimant la cascade bien sur):

--Remarquer l'utilisation de instead of a la place de for dans la définition du trigger

CREATE TRIGGER trigger_Tcivilites_Delete
ON Tcivilites INSTEAD OF DELETE
AS
BEGIN
--Supression dans la table Tpersonnes
DELETE Tpersonnes WHERE fkcivilite IN(SELECT ID FROM Deleted)
--Supression dans la table Tcivilites
DELETE Tcivilites WHERE ID IN(SELECT ID FROM Deleted)
END

Toutefois j'ai un doute quand a une possible récursivité du au second delete.

Mais je pense que l'utilisation de la cascade doit être plus rapide car implémenter dans le sgbdr a un plus bas niveau.

signaler à un administrateur
Commentaire de jimmy69 le 10/06/2006 14:26:49

salut salut Malkuth,

Merci des que j'ai un peu de temps je test cela et te dit quoi !

Je te remercie deja pour les infos !

Bon week end ..on a enfin du soleil sur la belgique ahhh que du bonheur !

Christophe
un bouillonnais

signaler à un administrateur
Commentaire de jimmy69 le 08/07/2006 15:35:43

Merci a ceux qui ont note cette source..ca fait plaisir de savoir que l'on peut aide certains !

Car grace a tout le reseaux codes sources (c#, sql, etc..) j'en ai gagne du temps !

Bon dev a tous et bonnes vacances ..
Christophe
Un bouillonnais

signaler à un administrateur
Commentaire de habbaz1 le 18/06/2007 17:09:29

merciiiiiiiiiiiiiiiiiiii bcp  "Malkuth"








signaler à un administrateur
Commentaire de jimmy69 le 18/06/2007 19:55:00

Salut salut,

content que cela puisse te servir !

Bon coding
Christophe

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

[SQL SERVEUR 2000]Suppression et contrainte integrite ! [ par jimmy69 ]   bonjour a tous, J'ai un p'tit souci au point de vue des suppressions dans mes tables !je vous explique ... J'ai un projet qui contient quelques Moteur de recherche SQL 2000 [ par vindavid38 ] ZanTarBonjour je souhaiterais savoir  si sql 2000 a un moteur spécial pour le fonctionnement du partitionnement horizontal?? Est ce que requete sql server? [ par firas_tn ] salut a tous j'ai une table ou j'ai les champs suivants:  ospf              recherche mot clé [ par nick774 ] Salut, On m'a redirigé sur votre site alors je tente ma chance... Soit: lechamp1 et lechamp2 les éléments du formulaire (page1.asp) c Packages avec erreurs [ par dpfort ] Bonjour,Je suis en train de tester les packages et les fonctions. J'ai cherché la solution à ces erreurs, mais cela ne s'améliore pas.P SQL Bulk Insert champ identitty [ par Myke ] Je possede une table du genrePK (auto incrementation)Descr1(Char)Desc2(Char)et un csv qui contient les info suivanteChamp#1;Champ#2Champ#3;Champ#4Cham historique des requetes sql server 2000 [ par Draven ] Bonjour,J'ai développé une application en c# qui fait des enregistrements, des visualisations , des mise à jour et qui utilise mes proc Probleme de DATE sous SQL server [ par youyou08 ] J'ai un probleme avec la création d'une variable Date sous SQL server J'ai taper le code suivant pour créer ma variable DECLARE @date DATET [SQL Server] Problème avec serveur lié Access distant [ par oluha ] BonjourJ'ai besoin de transférer une table d'une base Access vers SQL Server dans mon programme en Delphi (et vis versa). Comme le BatchMove d&#2 UPDATE SQL DELPHI ERREUR [ par WinLin ] bonjour a tous,voici ma requete elle realise un update d'une table si la reference d'une personne et la reference d'une entreprise sont exactement a c


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.