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

Développement SQL Server Discussion :

Trigger qui ne marche pas sous management studio


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2008
    Messages : 103
    Par défaut Trigger qui ne marche pas sous management studio
    Bonjour,

    J'ai créé un trigger sous T-sql qui marche trés bien (En gros : C'est pour empecher de supprimer plus d'une ligne dans une table), mais le trigger n'est pas exécuté si je passe par l'interface graphique de management studio, c'est à dire directement dans ma table.

    J'utilise sql server 2005. Code ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TRIGGER Nosupvente
    ON vente.VENTE
    AFTER DELETE
    AS
    IF @@ROWCOUNT >1
    	BEGIN	
    		PRINT 'Oh !!! 1 Seule ligne peut être supprimée à la fois'
    		ROLLBACK
    	END
    Merci pour votre aide

  2. #2
    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,
    Lors de la suppression de lignes depuis SSMS une requete est générée pour chaque ligne supprimé, c'est pourquoi la limitation testé par le déclencheur n'est jamais atteinte. Pour vous en convaincre, le plus simple est de lancer SLQ Server Profiler et de regarder les requêtes qui sont envoyées au moteur.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par ikeabp Voir le message
    Bonjour,

    J'ai créé un trigger sous T-sql qui marche trés bien (En gros : C'est pour empecher de supprimer plus d'une ligne dans une table), mais le trigger n'est pas exécuté si je passe par l'interface graphique de management studio, c'est à dire directement dans ma table.

    J'utilise sql server 2005. Code ci dessous :
    Merci pour votre aide
    A ta place j'éviterai d'utiliser le ROLLBACK dans un trigger, utilise INSTEAD OF

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2008
    Messages : 103
    Par défaut
    Citation Envoyé par cmako Voir le message
    A ta place j'éviterai d'utiliser le ROLLBACK dans un trigger, utilise INSTEAD OF
    Le INSTEAD OF est utilisé lorsque il y des vues non ?

    Ce que dit jero44 à l'air de tenir le route, je vais tester

    Merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par ikeabp Voir le message
    Le INSTEAD OF est utilisé lorsque il y des vues non ?

    Ce que dit jero44 à l'air de tenir le route, je vais tester

    Merci
    Pas forcément:
    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
    CREATE TRIGGER TR_VENTE_DEL
    ON VENTE
    INSTEAD OF DELETE
    AS
    	IF (SELECT COUNT(1) 
    		FROM DELETED )=1
    	BEGIN 
    		DELETE FROM v
    		FROM VENTE v
    		INNER JOIN DELETED d
    			ON v.VENTE_PK = d.VENTE_PK
    	END ELSE BEGIN
    		RAISERROR('TR_VENTE_DEL: Impossible à supprimer, plus d''une ligne',16,1)
    	END
    GO

  6. #6
    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
    Oui il est possible de définir des déclencheurs INSTEAD OF sur des tables et des vues mais cela ne va pas résoudre le problème dans le cas présent.

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par jero44 Voir le message
    Oui il est possible de définir des déclencheurs INSTEAD OF sur des tables et des vues mais cela ne va pas résoudre le problème dans le cas présent.
    Pourquoi? Je n'utilise QUE management studio. Essaye.

  8. #8
    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
    SQL Management Studio envoie des instructions SQL au moteur. Le moteur interprète donc les insctructions SQL qu'il reçoit.
    Dans le cas présent si l'on tente de supprimer 2 lignes depuis Management Studio (en mode graphique) alors 2 instructions DELETE sont envoyés au moteur, et donc les déclencheurs sont exécutés 2 fois. voila pourquoi dans le cas présent le déclencheur INSTEAD OF ne va pas résoudre le problème

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par jero44 Voir le message
    SQL Management Studio envoie des instructions SQL au moteur. Le moteur interprète donc les insctructions SQL qu'il reçoit.
    Dans le cas présent si l'on tente de supprimer 2 lignes depuis Management Studio (en mode graphique) alors 2 instructions DELETE sont envoyés au moteur, et donc les déclencheurs sont exécutés 2 fois. voila pourquoi dans le cas présent le déclencheur INSTEAD OF ne va pas résoudre le problème
    Je n'ai jamais vu ça. Il n'efface pas ligne par ligne. Enfin tout dépends de ta commande. D'ailleurs c'est quoi ta commande?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM vente
    WHERE condition
    ou c'est autre chose?

    Dans l'onglet messages tu vois quoi
    ça:
    1 row(s) affected
    1 row(s) affected
    1 row(s) affected

    ou ça:
    3 row(s) affected
    ?

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    Je pense que jero44 parle du comportement de Management Studio quand tu fais un "open table" et que tu supprimes les lignes par l'interface graphique.

    Au passage, .

  11. #11
    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
    Oui je parle bien du problème de comportement en mode graphique tel qu'exprimé initialement par ikeabp.

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2008
    Messages : 103
    Par défaut
    Effectivement mon pb est bien sous Management studio.
    Le retour donne bien x lignes affectées.
    Mais lorsque lecture de la trace : 1 requete par lignes supprimées.
    Donc au final mon compteur (@@ROWCOUNT) reste tjrs à 1.
    Le principal est que ma requet SQL fonctionne, pour le reste... c'est à titre informatif !

    Merci à tous

Discussions similaires

  1. Fonction qui ne marche pas sous FireFox
    Par Foudébois dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/11/2006, 14h35
  2. un window.open qui ne marche pas sous FF
    Par DevloNewb' dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/07/2006, 14h07
  3. Applet java qui ne marche pas sous opéra, pourquoi ?
    Par WeDgEMasTeR dans le forum Applets
    Réponses: 2
    Dernier message: 17/05/2006, 00h23
  4. HTTP_REFERER qui ne marche pas sous IE
    Par manaboko dans le forum Langage
    Réponses: 6
    Dernier message: 15/11/2005, 14h23
  5. javascript:history.go qui ne marche pas sous IE
    Par fpouget dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 23/09/2005, 08h23

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