none
Preciso criar uma constraint UNIQUE, em uma coluna com dados duplicados RRS feed

  • Pergunta

  • Caros amigos,

    Estou com um problemão, tenho uma tabela com quase 250.000 registros.
    Uma das colunas (coluna: CdCPF_CGC) possui dados em branco e duplicados, preciso que os próximos registros não dupliquem nem recebam dados em branco.
    Usei o comando abaixo:

    ALTER TABLE Pessoa   
    WITH NOCHECK
    ADD  CONSTRAINT unq_CPFCNPJ  UNIQUE (CdCPF_CGC)   
    GO

    O erro retornado, foi o erro abaixo:

    Mensagem 1505, Nível 16, Estado 1, Linha 3
    The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.Pessoa' and the index name 'unq_CPFCNPJ'. The duplicate key value is (121.407.137-61    ).
    Mensagem 1750, Nível 16, Estado 0, Linha 3
    Could not create constraint. See previous errors.
    The statement has been terminated.

    Poderiam me ajudar a construir esta constraint?
    Muito obrigado.
    quinta-feira, 6 de outubro de 2022 17:21

Todas as Respostas

  • Ronald,

    Neste caso não tem como criar este tipo de constraint enquanto existir dados duplicados, pois a partir do momento em que você implementa a regra o SQL Server vai validar todos os dados já existentes na coluna.


    Pedro Antonio Galvão Junior [MSc. | MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 6 de outubro de 2022 19:11
  • Olá Ronald,
     
    Alguma novidade sobre a consulta feita?
     
    A resposta fornecida foi útil?
     
    Obrigado por usar os fóruns do MSDN.
     
    Pablo Garcia
    ____________________________
    Por favor, lembre-se de "Marcar respostas" para respostas que resolveram seu problema, é uma maneira comum de reconhecer aqueles que ajudaram e torna mais fácil para outros visitantes encontrarem a solução mais tarde.
     
    Se você tiver algum elogio ou reclamação sobre o suporte do MSDN, sinta-se à vontade para entrar em contato com MSDNFSF@microsoft.com
    quinta-feira, 6 de outubro de 2022 21:08
  • Caro Pedro, 

    Muito obrigado!
    Estou muito precisado de impedir que nesta tabela sejam inseridos valores repetidos, de qualquer jeito.
    Você teria como me ajudar?
    segunda-feira, 10 de outubro de 2022 15:56
  • Ronald,

    Sim, eu entendi, mas neste caso a sua tabela já contem os dados duplicados.

    Neste caso o primeiro passo a fazer é remover uma das linhas de registros duplicados e depois criar a regra.

    Veja o exemplo abaixo:

    -- Criando a Tabela --
    Create Table Clientes
    (CodigoCliente Int Primary Key Identity(1,1),
      NomeCliente Varchar(80) Not Null,
      RGCliente Int Not Null)
    Go

    -- Inserindo --
    Insert Into Clientes (NomeCliente, RGCliente)
    Values ('Pedro',123456789),
                ('João Pedro',123456788),
                ('Eduardo',123456393),
    ('Fernanda',123445712),
    ('Maria Luíza',123456789)
    Go

    -- Identificando registros duplicados --
    Select Row_Number() Over (Partition By RGCliente Order By RGCliente) As Duplicados, RGCliente
    From Clientes
    Go

    ------ Aqui você vai ter que verificar o que vai fazer, se vai remover todos os registros duplicados, se vai enviar para outra tabela, enfim --
    -- Removendo os registros duplicados --
    ;With CTEDuplicados (Duplicados, RGCliente)
    As
    (
    -- Identificando registros duplicados --
    Select Row_Number() Over (Partition By RGCliente Order By RGCliente) As Duplicados, RGCliente From Clientes
    )
    Delete From CTEDuplicados
    Where Duplicados >=2
    Go

    -- Consultando --
    Select * From Clientes
    Go

    -- Criando a Constraint --
    Alter Table Clientes
     Add Constraint [UQ_RGClientes] Unique (RGCliente)
    Go


    Pedro Antonio Galvão Junior [MSc. | MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 10 de outubro de 2022 17:05
  • Olá Ronald,
     
    Alguma novidade sobre a consulta feita?
     
    A resposta fornecida foi útil?
     
    Obrigado por usar os fóruns do MSDN.
     
    Pablo Garcia
    ____________________________
    Por favor, lembre-se de "Marcar respostas" para respostas que resolveram seu problema, é uma maneira comum de reconhecer aqueles que ajudaram e torna mais fácil para outros visitantes encontrarem a solução mais tarde.
     
    Se você tiver algum elogio ou reclamação sobre o suporte do MSDN, sinta-se à vontade para entrar em contato com MSDNFSF@microsoft.com
    quarta-feira, 12 de outubro de 2022 17:51