none
Não gravar itens repetidos RRS feed

  • Pergunta

  • No sqlserver, tem como fazer uma trigger que quando um erro de chave unica for disparado ele retorna uma mensagem ou simplesmente ignora os dados a serem gravados?
    • Movido Giovani Cr quinta-feira, 3 de abril de 2014 20:20
    quinta-feira, 3 de abril de 2014 19:56

Respostas

  • Junior,

    Na verdade por padrão o SQL Server já faz este tipo de tratamento, mas você pode personalizar, veja este simples exemplo:

    create table t (id int not null, taxcode int not null)
    
    alter table t add constraint uq_t unique (taxcode)
    
    -- Ok
    insert into t values (1, 1)
    
    -- Erro
    insert into t values (2, 1)
    
    -- Se quiser personalizar
    BEGIN TRY
     insert into t values (2, 1)
    END TRY
    BEGIN CATCH
     IF ERROR_NUMBER() = 2627
     SELECT 'O código está duplicado'
    END CATCH
    drop table t


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta jjunior.net sexta-feira, 4 de abril de 2014 18:03
    sexta-feira, 4 de abril de 2014 13:56

Todas as Respostas

  • Bom dia jjunior, 

    seria algo nesse sentido que você queria?

    http://stackoverflow.com/questions/18502802/trigger-to-prevent-insertion-for-duplicate-data-of-two-columns

    Att,


    Giovani Cruzara – Microsoft Contingent Staff

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Msdn Community Support

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 3 de abril de 2014 20:28
  • Junior,

    Na verdade por padrão o SQL Server já faz este tipo de tratamento, mas você pode personalizar, veja este simples exemplo:

    create table t (id int not null, taxcode int not null)
    
    alter table t add constraint uq_t unique (taxcode)
    
    -- Ok
    insert into t values (1, 1)
    
    -- Erro
    insert into t values (2, 1)
    
    -- Se quiser personalizar
    BEGIN TRY
     insert into t values (2, 1)
    END TRY
    BEGIN CATCH
     IF ERROR_NUMBER() = 2627
     SELECT 'O código está duplicado'
    END CATCH
    drop table t


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta jjunior.net sexta-feira, 4 de abril de 2014 18:03
    sexta-feira, 4 de abril de 2014 13:56