¿Cómo hacer que el código de activación se ejecute solo para una aplicación específica?

8

Me preguntaba si es posible habilitar un desencadenador solo para mi aplicación actual y no para cualquier sql ejecutado en la tabla.

La situación:

Hay dos aplicaciones que trabajan en la misma base de datos. App1 y App2.

Tengo un activador en 'MyTable' que solo debe activarse cuando App1 está ejecutando una consulta, pero no cuando App2 lo está haciendo.

Patric
fuente
Bueno, es lógico. no es asi ¿Dónde tendrías el nombre de la aplicación? Si tiene acceso a él en el gatillo (insertado), entonces es fácil.
Super Peon
1
Patric, como alternativa al uso APP_NAME(), también puede usar SET CONTEXT_INFO. SET CONTEXT_INFOse usa comúnmente para enviar información a disparadores como este.
Nick Chammas

Respuestas:

10

Si bien no es un buen diseño, es factible. Tendrá que poner lógica en el disparador para que el código solo se ejecute cuando se conecte la aplicación correcta.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end
mrdenny
fuente
8
Puede que no sea una preocupación en este caso específico, pero otros lectores potenciales deben tener en cuenta que app_name()es muy fácil suplantar a través de las propiedades de la cadena de conexión.
Aaron Bertrand
44
Sí, muy fácil de engañar. No haga esto por razones de seguridad, pero para evitar pequeñas deficiencias de software u otros trucos convenientes, probablemente esté bien. Tenemos algunos que hacen esto.
db2
1
Muy cierto, esto sería MUY fácil de manejar. Pero suponiendo que los usuarios de la aplicación no tengan ninguna intención (no puedo creer que lo haya dicho) funcionará. No es la mejor idea, pero hará el trabajo. Jon, gracias por formatear. No iba a intentar hacer eso en mi teléfono.
mrdenny