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 :

[SQL2K] Activation et Désactivation de trigger


Sujet :

Développement SQL Server

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut [SQL2K] Activation et Désactivation de trigger
    Bonjour,

    J'ai trouvé sans la superbe FAQ de développez.com un moyen de désactiver et réactiver les contraintes.

    J'aimerais juste savoir si cette activation et désactivation porte uniquement sur ma connexion ou sur l'ensemble de la base ...

    Mon cas :
    J'ai une table avec un Trigger. Dans UN cas bien précis, je souhaiterais que celui-ci ne s'active pas.
    Par contre, il se peut qu'au même moment, un autre utilisateur fasse une action pour laquelle il faut absolument que le trigger s'active ...


    Pour info, ma commande se fait dans une PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       [...]
       Ma commande
       [...]
       d'autres commandes...
    Si quelqu'un a des précisions à m'apporter ...

    Merci !

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    La solution que j'utilise pour le moment :
    Avant de faire mon action, j'ouvre une transaction SERIALIZABLE ....

    C pas glop mais normalement çà marche !

  3. #3
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    La désactivation du trigger est en effet générale et non pas propre à la connexion.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    Merci !

    Mais est-ce que le fait de mettre dans une connexion serializable me protège ?

    Merci !

  5. #5
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Ca dépend. Le niveau d'isolation serializable la verrouillé la table si SQL Server n'a pas d'autre solution pour empêcher un INSERT dans le range touché par ta requête. Si ta requête génère un verrouillage au niveau de la table entière, tu es bon. Si tu veux avoir de meilleures garanties, il y a d'autres solutions, qui vont être moins impactantes pour les performances qu'un niveau serializable.

    Tu pourrais par exemple tester dans ton trigger le SYSTEM_USER, et faire un RETURN au début du trigger pour éviter son déclenchement si c'est l'utilisateur de ta procédure qui lance un DML. Cela te permet de continuer à exécuter le trigger pour les autres.
    Si tu n'as pas de différence par login, tu peux par exemple insérer dans une table de paramètres ton SPID (@@SPID) avant de lancer le DML. Ainsi tu testes le contenu de la table dans ton trigger, dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IF EXISTS (SELECT 1 FROM dbo.parametre WHERE [SPID] = @@spid)
      RETURN

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    J'ai un peu de mal (retour de week-end ) à comprendre les deux solutions proposées ...

    Login
    J'ai potentiellement plusieurs utilisateurs qui utilisent ma requête d'activation/désactivation du trigger donc comment savoir qui est le bon ...

    SPID
    Pareil ...


    Euh en tapant mon texte, je me demande si j'ai pas compris ...
    Dans la requête qui aujourd'hui active ou désactive le trigger, je remplace par un INSERT @@SPID dans une table de paramètres et dans mon trigger, j'effetue le select que tu proposes. Ainsi si j'ai plusieurs utilisateurs cela devrait marcher ...


    J'ai bon ?

  7. #7
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Oui, c'est bien ça. C'est du bricolage mais ça le fait.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    Ok !
    Merci beaucoup, je vais regarder cela de près !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/07/2009, 12h08
  2. Réponses: 2
    Dernier message: 01/02/2009, 17h11
  3. Réponses: 2
    Dernier message: 12/02/2004, 13h07
  4. [Syntaxe Oracle/Sybase] désactiver un trigger
    Par MashiMaro dans le forum Sybase
    Réponses: 3
    Dernier message: 30/10/2003, 11h17
  5. Désactiver un trigger sous MS Sql Server
    Par WOLO Laurent dans le forum Développement
    Réponses: 6
    Dernier message: 03/07/2003, 12h51

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