none
Exclusão de Triggers RRS feed

  • Pergunta

  • Prezados,

    Tenho um trigger aplicado a uma tabela e quero excluí-lo.

    Porém, quando executo o comando DROP TRIGGER CortaRefeicaoPonto, recebo uma mensagem informando que o mesmo não pode ser excluído porque não existe. Quando executo CREATE TRIGGER CortaRefeicaoPonto ON TELESSVR.REPAFD003 FOR INSERT, a mensagem é a de que o comando não pode ser executado porque o objeto já existe.

    Não entendi. Alguém já passou por isso? Como se exclui um trigger?

    Careio que o problema também pode estar relacionado com perfmissões de acesso; como faço para verificar se meu usuário têm premissões para executar essas tarefas?


    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 11:40

Respostas

Todas as Respostas

  • Andre,

     

     

    Coloque o Schema, exemplo:

    DROP TRIGGER dbo.T_Insert


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Marcado como Resposta André Corrêa segunda-feira, 21 de novembro de 2011 12:27
    segunda-feira, 21 de novembro de 2011 11:43
    Moderador
  • Fabrizzio,

    Como faço para verificar se meu usuário têm permissões para fazer essa exclusão?


    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 11:46
  • Andre,

     

    Voce precisa de permissão DDL ao menos...


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 21 de novembro de 2011 11:47
    Moderador
  • Onde eu verifico se tal permissão existe?
    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 11:50
  • André,

     

    Se voce for SA, na arvore pelo SSMS, em Security -> Logins, abra seu usuario e busque a base e veja a permissão que voce possui, voce conseguiu deletar a trigger com o schema?


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 21 de novembro de 2011 11:51
    Moderador
  • Fabrizzio,

    No SSMS eu não consegui enxergar o nó Login. Eu acessei as propriedades do meu usuário em Security\Users e notei que faço parte da role db_owner.

    Como membro dessa role eu não deveria conseguir executar comandos DDL?

    Ainda não consegui deletar a trigger.


    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 12:00
  • Consegue sim Andre,

     

    Vamos fazer de forma grafica:

    No SSMS busque:

    Sua instancia -> Sua Base -> Tables -> Ache sua tabela e clique em "+", va em trigger, botão direito na trigger que voce quer deletar, SCRIPT TRIIGER AS -> Drop to -> New query window, e execute o comando que ele gerar.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 21 de novembro de 2011 12:02
    Moderador
  • Fabrizzio,

    As tabelas da minha base são nomeadas assim:

    TeleSSVR.NomeDaTabela1
    TeleSSVR.NomeDaTabela2
    Vetorh.NomeDaTabela1
    Vetorh.NomeDaTabela2
    ...

    A trigger que eu queria apagar estava na tabela TeleSSVR.RepAfd.

    Usando DROP TRIGGER CortaRefeicaoPonto eu não consegui a exclusão, mas usando DROP TRIGGER TeleSSVR.CortaRefeicaoPonto deu certo.

    Afinal, o que é TeleSSVR e Vetorh, do modo como foram apresentados?


    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 12:09
  • André,

     

    O TeleSSVR e o Vetorh são seus schemas, o schema é uma coleção de objectos, no caso, voce possui 2, portanto, era necessario colocar o schema, lembre-se, voce pode sim te objetos com o mesmo nome, em schemas diferentes, dentro de uma mesma base.

     

    Conseguiu deletar a trigger?


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 21 de novembro de 2011 12:11
    Moderador
  • Fabrizzio,

    Sim, consegui deletar.

    Aproveitando sua explicação, os schemas existem apenas para que você consiga manter objetos com o mesmo nome? Ou há outras razões que justifiquem sua existência?


    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 12:15
  • Andre,

     

    Que bom =)

     

    Eles existem por uma razão sim, imagine a seguinte situação:

    - Voce tem um ERP que é utilizado por toda empresa

    - Porem neste ERP, as permissoes são de bancos

    - Entra um cara novo do setor fiscal

    - Sua base esta modelada com a utilização de Schema, então voce possui N schemas alem do fiscal

    - Entra um usuario novo do fiscal, voce tem 2 opções:

    1- Ou criar uma role e dar permissao de role a ele (É uma opção valida, porem ainda sim, voce teria que dar permissao de todos os objetos necessarios para o role)

    2- Dar permissão no schema, muito mais simples

     

    Andre, se achar justo, marque como "resposta" as respostas que te ajudaram a solucionar os problemas e duvidas.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 21 de novembro de 2011 12:18
    Moderador
  • Ou seja: os schemas existem para que possamos agrupar os objetos de banco (tabelas, procedures, etc), de modo que seja possível gerenciar permissões de acesso e demais configurações apenas para os objetos de um schema, sem a necessidade de aplicar essas alterações ao banco inteiro.

    No exemplo que você deu eu poderia permitir que o novo funcionário tivesse acesso ao banco do ERP, porém com consultas liberadas apenas às tabelas do schema Fiscal. Aos demais ele não teria nenhuma perfmissão.

    É isso?


    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 12:22
  • Andre,

     

    Exatamente, porem, veja, voce esta como dbowner, então voce possui controle total do banco, de todos os schemas deste banco, até de dropar a base se voce quiser...


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 21 de novembro de 2011 12:24
    Moderador
  • Entendi, Fabrizzio.

    Suas respostas serão marcadas como úteis. Muito obrigado pela ajuda.

    Um abraço!


    André Corrêa
    ANALISTA DE SISTEMAS
    BELO HORIZONTE - MG
    segunda-feira, 21 de novembro de 2011 12:26
  • Fabrizzio

    Apesar do tempo sua resposta me ajudou a excluir a minha trigger.

    Muito obrigado

    Paulo

    quinta-feira, 8 de fevereiro de 2018 16:45