begin process at 2010 03 20 05:31:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > [MS SQL SERVEUR] ON DELETE CASCADE

[MS SQL SERVEUR] ON DELETE CASCADE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : jimmy69

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
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..


 Sources du même auteur

Source avec Zip [MS SQL SERVER]EXPORTATION DE DONNEES VERS MICROSOFT EXCEL
Source avec Zip [MS SQL SERVEUR] IMPORT/EXPORT DE DONNEES AVEC BCP

 Sources de la même categorie

COMMENT EXPORTER DES DONNERS VERS EXCEL par ig3
COMMENT EXPORTER DES DONNERS VERS EXCEL par ig3
Source avec Zip Source avec une capture SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATIO... par FENETRES
[SQL SERVEUR] VÉRIFIER L'ESPACE OCCUPÉ DANS UNE BASE DE DONN... par Hyperion
TROUVER LES PROCHAINS ANNIVERSAIRES par zefo

 Sources en rapport avec celle ci

COMMENT EXPORTER DES DONNERS VERS EXCEL par ig3
COMMENT EXPORTER DES DONNERS VERS EXCEL par ig3
TROUVER LES PROCHAINS ANNIVERSAIRES par zefo
REQUÊTE SQL POUR DÉTERMINER L'ESPACE OCCUPÉ DANS LES TABLESP... par sgoriaud
Source avec Zip LISTE DES PAYS DU MONDE EN FRANÇAIS/ANGLAIS DANS UNE BASE SQ... par Joe_le_mort

Commentaires et avis

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.

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.

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

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

Commentaire de habbaz1 le 18/06/2007 17:09:29

merciiiiiiiiiiiiiiiiiiii bcp  "Malkuth"








Commentaire de jimmy69 le 18/06/2007 19:55:00

Salut salut,

content que cela puisse te servir !

Bon coding
Christophe

Commentaire de anwar666 le 08/07/2009 01:04:20

salut j'ai une question , est ce que c'est Faisable d'ajouter plusieurs enregistrement à la fois dans une table en sql server 2000 !!!!
Mèrci D'avance !!
Cordialement !!

 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 contrainte sql [ par talibikeba ] bonjour j'ai un souci danshttp://www.sqlfr.com/infomsg.aspx?ajout=1 la conception de ma base des donnees :le but est de mettre une conditon sport, si Multicriteres SQL avec jointures dynamiques [ par slycers ] Bonjour, Je travaille actuellement sur MySQL avec interfaçage PHP (WAMP 2.0). Je cherche depuis quelque temps à réaliser une recherche multi-critère instalation de sql server 2005 [ par vbfrance90 ] bonjour, j'ai instalé sql server 2005 mé quand je ve travaillé il me fé nom du serveur jé écrit le nom de serveur ke jé fé lors de l'instalation mé il sql server 2000 et builder c++ [ par youkami ] slt tt le monde ,commet je peut etablir une connexion entre sql server 2000 et builder c++ 6,svp c vraiment urgent,et mercie d'avence Identifier les connexions qui n'ont pas de mots de passe sur SQL Server 2000 [ par FNIAMKE ] Bonjour Mme/Mr J'ai besoin d'aide SVP. Je cherche à identifier les connexions qui n'ont pas de mots de passe sous SQL Server 2000. J'ai essayé cett instalation sql server 2005 [ par vbfrance90 ] bonjour, jé instalé sql server mé quand je ve travaillé il me demmande le nom du server et quand je fait de nom du server qui ma donner lors de l'inst sql server et internet [ par favella ] Bonjour, je veux savoir si je peux héberge juste la base de données a internet et connecté une application non héberge a cette base depuis plusieurs p sql [ par laila89 ] salam S'il vous plait dans le cas ou on a deux classe binathoum une relation plusieurs -plusieurs donc une table associative pour presenter cette SQL paramètre dynamique [ par elyxir40 ] Bonjour, je suis en formation SQL et je cherche une requète SQL me permettant de classer des films par nationalité, c'est moi qui choisit la nationali


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales