Wie kann Triggercode nur für eine bestimmte Anwendung ausgeführt werden?


8

Ich habe mich gefragt, ob es möglich ist, einen Trigger nur für meine aktuelle Anwendung und nicht für SQL zu aktivieren, das für die Tabelle ausgeführt wird.

Die Situation:

Es gibt zwei Anwendungen, die an derselben Datenbank arbeiten. App1 und App2.

Ich habe einen Auslöser für 'MyTable', der nur ausgelöst werden sollte, wenn App1 eine Abfrage ausführt, aber nicht, wenn App2 dies tut.


Nun, es ist logisch. ist es nicht? Wo würdest du den App-Namen haben? Wenn Sie im Trigger (eingefügt) Zugriff darauf haben, ist es einfach.
Super Peon

1
Patric, als Alternative zur Verwendung APP_NAME()können Sie auch verwenden SET CONTEXT_INFO. SET CONTEXT_INFOwird häufig verwendet, um Informationen an solche Trigger zu senden.
Nick Chammas

Antworten:


10

Es ist zwar kein gutes Design, aber machbar. Sie müssen Logik in den Trigger einfügen, damit der Code nur ausgeführt wird, wenn die richtige Anwendung verbunden ist.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end

8
In diesem speziellen Fall ist dies möglicherweise kein Problem, aber andere potenzielle Leser sollten beachten, dass app_name()es sehr einfach ist, über Eigenschaften von Verbindungszeichenfolgen zu fälschen.
Aaron Bertrand

4
Ja, sehr leicht zu fälschen. Tun Sie dies nicht aus Sicherheitsgründen, aber um kleinere Softwaremängel oder andere praktische Tricks zu umgehen, sind Sie wahrscheinlich in Ordnung. Wir haben einige, die das tun.
DB2

1
Sehr wahr, das wäre SEHR leicht zu umgehen. Aber wenn man annimmt, dass die Anwendungsbenutzer keine Absichten haben (ich kann nicht glauben, dass ich das einfach so formuliere), wird es funktionieren. Nicht die beste Idee, aber es wird den Job machen. Jon, danke für die Formatierung. Ich wollte das nicht auf meinem Handy versuchen.
Mrdenny
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.