Comment faire exécuter le code de déclenchement uniquement pour une application spécifique?

8

Je me demandais s'il était possible d'activer un déclencheur uniquement pour mon application actuelle et non pour un SQL exécuté sur la table.

La situation:

Deux applications fonctionnent sur la même base de données. App1 et App2.

J'ai un déclencheur sur «MyTable» qui ne doit être déclenché que lorsque App1 exécute une requête, mais pas lorsque App2 le fait.

Patric
la source
Eh bien, c'est logique. n'est-ce pas? où auriez-vous le nom de l'application? Si vous y avez accès dans la gâchette (insérée), c'est facile.
Super Peon
1
Patric, comme alternative à l'utilisation APP_NAME(), vous pouvez également utiliser SET CONTEXT_INFO. SET CONTEXT_INFOest couramment utilisé pour envoyer des informations à des déclencheurs comme celui-ci.
Nick Chammas

Réponses:

10

Bien que ce ne soit pas un bon design, c'est faisable. Vous devrez mettre la logique dans le déclencheur pour que le code ne soit exécuté que lorsque l'application appropriée est connectée.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end
mrdenny
la source
8
Cela peut ne pas être un problème dans ce cas spécifique, mais d'autres lecteurs potentiels devraient noter qu'il app_name()est très facile d'usurper via les propriétés de la chaîne de connexion.
Aaron Bertrand
4
Oui, très facile à usurper. Ne le faites pas à des fins de sécurité, mais pour contourner des déficiences logicielles mineures ou d'autres astuces pratiques, vous êtes probablement d'accord. Nous en avons quelques-uns qui font cela.
db2
1
Très vrai, ce serait très facile de se déplacer. Mais en supposant qu'il n'y a aucune intention des utilisateurs de l'application (je ne peux pas croire que je viens de le dire), cela fonctionnera. Ce n'est pas la meilleure idée, mais ça fera l'affaire. Jon, merci pour le formatage. N'allait pas essayer de faire ça sur mon téléphone.
mrdenny