IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Problème avec trigger for delete


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Points : 121
    Points
    121
    Par défaut Problème avec trigger for delete
    Bonjour,

    a tous, j'ai écrit le trigger suivant en SQL 2000:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from TBLIMPORTSALES_ISA  where isa_id = 2756
    le trigger fonctionne parfaitement

    mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 141
    Points : 176
    Points
    176
    Par défaut
    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.

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Points : 121
    Points
    121
    Par défaut
    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

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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"

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Points : 121
    Points
    121
    Par défaut
    Merci pour l'explication !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec trigger (table INSERTED)
    Par ygrim dans le forum Développement
    Réponses: 1
    Dernier message: 20/04/2008, 21h00
  2. [WPF] Problème avec Trigger
    Par Heroes dans le forum C#
    Réponses: 7
    Dernier message: 16/07/2007, 16h58
  3. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  4. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  5. [9i] problème avec trigger after logon
    Par Michael# dans le forum Oracle
    Réponses: 2
    Dernier message: 17/03/2005, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo