none
Trigger para valores duplicados RRS feed

  • Pergunta

  • Boa tarde,

    tentei criar uma Trigger para impedir valores duplicados, porém não esta funcioando, sou novo com trigger e nao sei como resolver o problema, segue o código.

    Alter Trigger InsertProduto on Produto Instead of Insert, Update
    As
    	Begin
    	Begin Try	
    		Select 
    		produto.nome 
    		From Produto 
    		inner join 
    		inserted on 
    		(produto.nome = inserted.nome);
    		
    		
    	Insert into Produto values (Nome, Origem, Descricao) values (inserted.nome, inserted.origem, inserted.descricao)
    	End Try
    	
    	Begin Catch
    		Select ' Produto ja cadastrado '
    	End Catch
    	End
    

    Rafael Poveda
    quarta-feira, 29 de setembro de 2010 16:13

Respostas

  • Boa tarde Rafael,

    Segue um exemplo bem simples envolvendo o seu cenário.

    Alter Trigger InsertProduto on Produto Instead of Insert
    As
    declare
    @int int;
    Begin
       
        Select @int = COUNT(*) From Produto inner join
        inserted on (produto.nome = inserted.nome);
       
        if @int >= 1                       
            Select ' Produto ja cadastrado ';       
        else
            Insert into Produto(Nome, Origem, Descricao)select nome, origem, descricao from inserted;   
    End

     

    Qualquer dúvida estou à disposição.

    • Marcado como Resposta Rafael.Poveda quarta-feira, 29 de setembro de 2010 16:31
    quarta-feira, 29 de setembro de 2010 16:27

Todas as Respostas

  • Boa tarde Rafael,

    Segue um exemplo bem simples envolvendo o seu cenário.

    Alter Trigger InsertProduto on Produto Instead of Insert
    As
    declare
    @int int;
    Begin
       
        Select @int = COUNT(*) From Produto inner join
        inserted on (produto.nome = inserted.nome);
       
        if @int >= 1                       
            Select ' Produto ja cadastrado ';       
        else
            Insert into Produto(Nome, Origem, Descricao)select nome, origem, descricao from inserted;   
    End

     

    Qualquer dúvida estou à disposição.

    • Marcado como Resposta Rafael.Poveda quarta-feira, 29 de setembro de 2010 16:31
    quarta-feira, 29 de setembro de 2010 16:27
  • Muito obrigado, acredito que isso ja resolva. Estou começando agora com essa parte tenho muito que estudar ainda hehehe
    Rafael Poveda
    quarta-feira, 29 de setembro de 2010 16:30
  • Rafael,

           Não acho que essa seja a melhor solução para o seu problema. O SQL Server possui CONSTRAINTS para fazer isso que você precisa. A constraint de UNIQUE evita que você tenha valores duplicados na sua tabela... Se for inserido um valor duplicado o SQL automaticamente devolve uma mensagem que erro na aplicação que pode ser facilmente tratada num bloco try/catch/finally.

           Att,

           Roberto Fonseca

     


    MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008
    sábado, 2 de outubro de 2010 14:23
    Moderador