Como fazer com que o código de acionamento seja executado apenas para um aplicativo específico?

8

Eu queria saber se é possível ativar um gatilho apenas para o meu aplicativo atual e não para qualquer sql executado na tabela.

A situação:

Existem dois aplicativos trabalhando no mesmo banco de dados. App1 e App2.

Eu tenho um gatilho em 'MyTable' que só deve ser acionado quando o App1 estiver executando uma consulta, mas não quando o App2 estiver fazendo isso.

Patric
fonte
Bem, é lógico. não é? onde você teria o nome do aplicativo? Se você tiver acesso a ele no gatilho (inserido), é fácil.
Super Peon
11
Patric, como alternativa ao uso APP_NAME(), você também pode usar SET CONTEXT_INFO. SET CONTEXT_INFOé comumente usado para enviar informações a gatilhos como este.
precisa

Respostas:

10

Embora não seja um bom design, é factível. Você precisará colocar a lógica no gatilho para que o código seja executado apenas quando o aplicativo correto estiver conectado.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end
Mrdenny
fonte
8
Pode não ser uma preocupação neste caso específico, mas outros leitores em potencial devem observar que app_name()é muito fácil falsificar através das propriedades da cadeia de conexão.
Aaron Bertrand
4
Sim, muito fácil de falsificar. Não faça isso por motivos de segurança, mas, para solucionar pequenas deficiências de software ou outros truques convenientes, você provavelmente está bem. Temos alguns que fazem isso.
DB2
11
É verdade que isso seria MUITO fácil de se locomover. Mas, assumindo que não há nenhuma intenção dos usuários do aplicativo (não acredito que acabei de colocar isso), ele funcionará. Não é a melhor ideia, mas fará o trabalho. Jon, obrigado pela formatação. Não ia tentar fazer isso no meu telefone.
mrdenny