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 :

probleme sur un trigger


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    345
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 345
    Par défaut probleme sur un trigger
    salut tout le monde,
    j ai deux tables dont la structure est la suivante
    tb1: code_avc type identity
    libelle type varchar
    tb2: num_dos type int primary key
    code_avc type int
    ...
    la table2 contient l info code_avc mon but est de creer un trigger delete sur table 1 qui empche la suppression si le code_avc s il existe dans tb2
    voici mon code
    create trigger t_del
    on tb1
    for delete
    as

    if (select code_avc from tb1
    where exists (select code_avc from tb2 where code_avc =tb1.code_avc))>0
    begin
    rollback
    print 'impossible'
    end
    else commit
    quand j essaye de supprimer un code_avc existant ca passe mais le probleme survient s il n existe pas est ce mon code est juste ou faux pouvez vous m aider svp
    Merci

  2. #2
    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
    Par défaut
    Bonjour,

    Dans un trigger FOR DELETE, vous avez accès à la table virtuelle DELETED qui a strictement la même structure que la table cible de la suppression de lignes, et qui contient les lignes candidates à la suppression qui a été demandée par la transaction qui a déclenché le trigger.

    Vous pouvez donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE TRIGGER TR_A_D_TB1
    	ON TB1
    	FOR DELETE
    AS
    BEGIN
    	IF EXISTS
    	(
    		SELECT *
    		FROM dbo.tb2 AS T
    		JOIN DELETED AS D
    			ON T.code_avc = D.code_avc
    	)
    	BEGIN
    		RAISERROR('Erreur !', 16, 1)
     
    		ROLLBACK TRANSACTION
    	END
    END
    Les transactions sous SQL Server étant implicites, vous n'avez pas besoin de valider la transaction (COMMIT).
    De plus le code du trigger fait partie de la transaction qui l'a déclenché

    @++

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    345
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 345
    Par défaut
    si je comprends bien que sql server a deux table virtuelle inserted et deleted
    est qui contiennent respectivement la nouvel ligne ajouter et la ligne a supprimer corriger moi si je me trompe puis que j les ai jamais utiliser
    merci pour votre reponse je vais l essayer et je vous tient en courant

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    345
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 345
    Par défaut
    jero44
    non puis que tb2 peut avoir 1 ou plusieurs code_avc

  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
    Par défaut
    est qui contiennent respectivement la nouvel ligne ajouter et la ligne a supprimer corriger moi si je me trompe puis que j les ai jamais utiliser
    C'est exact

    @++

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    345
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 345
    Par défaut
    Merci pour votre aide

  7. #7
    Membre expérimenté
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Par défaut
    bonjour,
    contenu de votre structure de table est qu'une contrainte de clé étrangère ne suffit pas à résoudre le problème?
    Ajouter une clé primaire sur tb1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter table tb1 add constraint pk_tb1 primary key(code_avc);
    Puis une clé étrangère sur tb2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter table tb2 add constraint fk_tb2_tb1 foreign key (code_avc) references tb1(code_avc);k

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

Discussions similaires

  1. Probleme sur un trigger
    Par phoenix345 dans le forum Développement
    Réponses: 2
    Dernier message: 02/01/2011, 14h42
  2. TRIGGER:Probleme sur After delete
    Par samsso2006 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 17/02/2010, 14h42
  3. Probleme de lock sur un trigger after insert
    Par funboard dans le forum Oracle
    Réponses: 5
    Dernier message: 04/03/2009, 12h14
  4. Réponses: 3
    Dernier message: 07/04/2003, 20h06
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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