Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2008, 11h54   #1
Membre du Club
 
Inscription : avril 2002
Messages : 124
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 124
Points : 46
Points : 46
Par défaut Problème avec trigger for delete

Bonjour,

a tous, j'ai écrit le trigger suivant en SQL 2000:
Code :
1
2
3
4
5
6
7
8
9
10
CREATE TRIGGER E_ISA_D
ON tblimportsales_ISA
FOR DELETE
AS
begin
declare @id int;
SELECT @id = isa_id FROM deleted;
DELETE FROM tblbudget_bdv WHERE isa_id=@id;
DELETE FROM TBLENTETESALES_SEN WHERE isa_id=@id;
end;
lorsque je fait un
Code :
DELETE FROM TBLIMPORTSALES_ISA  WHERE isa_id = 2756
le trigger fonctionne parfaitement

mais si je fais
Code :
DELETE FROM TBLIMPORTSALES_ISA
Il ne fonctionne pas.

Merci pour votre aide
NB: Il s'agit de tables importées, je ne peux pas utilisé l'intégrité référentiel

Tornade
tornade69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 19h12   #2
Membre actif
 
Homme Fabrice Moll
Inscription : juillet 2007
Messages : 141
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Moll
Localisation : Belgique

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2007
Messages : 141
Points : 172
Points : 172
C'est parce que, et je pense ne pas me tromper, la table deleted dans le second cas contient plus d'un record. Et le trigger s'enclenche une seule fois pour l'ensemble des records supprimés.
Fabrice Moll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 22h39   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 695
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 695
Points : 8 816
Points : 8 816
Bonjour,

C'est presque exact.
Comme votre trigger n'est pas ensembliste, lorsque vous écrivez DELETE sans clause WHERE, votre variable @id contient le dernier isa_id que vous avez supprimé de la table tblimportsales_ISA.
Il vous faudrait donc recoder votre trigger en écrivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER E_ISA_D
	ON TblImportSales_ISA
FOR DELETE
AS
BEGIN
	DELETE FROM dbo.tblbudget_bdv
	FROM dbo.TblBudget_bdv BDV
	JOIN DELETED D ON D.isa_id = BDV.isa_id
 
	DELETE FROM dbo.TbLenteteSales_SEN
	FROM dbo.TbLenteteSales_SEN SEN
	JOIN DELETED D ON D.isa_id = BDV.isa_id
END
elsuket est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 21h03   #4
Membre du Club
 
Inscription : avril 2002
Messages : 124
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 124
Points : 46
Points : 46
Bonjour,

Un grand merci, la procédure marche Nickel.

Par contre j'ai pas compris pourquoi il y avait de 'FROM' et que ca marche pas sans les 2 FROM

Merci Beaucoup
tornade69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2008, 21h41   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 695
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 695
Points : 8 816
Points : 8 816
Bonjour,

TSQL vous y oblige pour spécifier une jointure sur une instruction UPDATE ou DELETE.
Cela peut paraître bizarre de prime-abord, mais pourtant lorsqu'on écrit une commande INSERT INTO maTable SELECT mesColonnes FROM mesTables, on est dans le même "cas"
elsuket est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2008, 09h37   #6
Membre du Club
 
Inscription : avril 2002
Messages : 124
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 124
Points : 46
Points : 46
Merci pour l'explication !!
tornade69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h07.


 
 
 
 
Partenaires

Hébergement Web