none
Criacao de chave composta RRS feed

  • Pergunta

  •  

    Amigos,

     

    estou tentando inserir um registro mais o erro retornado é violacao de chave mais especificamente KEY DUPLICATE.

     

    Porém o registro que estou querendo inserir possui dois campos iguais e um terceiro diferente.

     

    Poque nao estou conseguindo inserir visto que a minha chave é composta dos campos A,B e C?

    A            B                 C

    5798116 18680739634 3187981203 Plano Oi Conta Total 200 0
    5798116 18680739634 3186831203 Plano Oi Conta Total 200 0

    terça-feira, 29 de abril de 2008 19:30

Respostas

  • Olá Daniel,

     

    Se você realmente tiver certeza de que a chave não está duplicada, isso pode ser dar por conta de uma constraint ou de um índice. Rode as procedures abaixo

     

    sp_helpindex 'Sua Tabela'

    sp_helpconstraint 'Sua Tabela'

     

    Verifique se existe algum índice e (ou) constraint referenciando as colunas A e B

     

    Posteriormente faça uma consulta para se certificar de que não existam registros duplicados

     

    Code Snippet

    SELECT * FROM TABELA

    INNER JOIN

     

    (SELECT A,B, COUNT(*) AS TOTAL

    FROM TABELA

    GROUP BY A, B

    HAVING COUNT(*) > 1) AS SUBQ

     

    ON TABELA.A = SUBQ.A AND TABELA.B = SUBQ.B

     

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 29 de abril de 2008 19:35

Todas as Respostas

  • Olá Daniel,

     

    Se você realmente tiver certeza de que a chave não está duplicada, isso pode ser dar por conta de uma constraint ou de um índice. Rode as procedures abaixo

     

    sp_helpindex 'Sua Tabela'

    sp_helpconstraint 'Sua Tabela'

     

    Verifique se existe algum índice e (ou) constraint referenciando as colunas A e B

     

    Posteriormente faça uma consulta para se certificar de que não existam registros duplicados

     

    Code Snippet

    SELECT * FROM TABELA

    INNER JOIN

     

    (SELECT A,B, COUNT(*) AS TOTAL

    FROM TABELA

    GROUP BY A, B

    HAVING COUNT(*) > 1) AS SUBQ

     

    ON TABELA.A = SUBQ.A AND TABELA.B = SUBQ.B

     

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 29 de abril de 2008 19:35
  •  

    Sim existe uma chave e indice para a tabela que estou querendo inserir, mais eu coloquei como composta vide exemplo:

     

    Code Snippet

    USE [BDCOBESTR]

    GO

    /****** Object: Index [PK_D_Pontual_Paggo] Script Date: 04/29/2008 16:31:36 ******/

    ALTER TABLE [dbo].[D_Pontual_Paggo] ADD CONSTRAINT [PK_D_Pontual_Paggo] PRIMARY KEY CLUSTERED

    (

    [Fat_ARBOR] ASC,

    [CPF_CNPJ_A] ASC,

    [MSISDN] ASC

    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

     

     

    terça-feira, 29 de abril de 2008 19:43
  • Oi Daniel,

     

    Com a sua chave primária eu tenho certeza de que não existe problema. Estou preocupado com as outras restrições que podem estar presentes (por isso a verificação das procedures e da query)... Façamos diferente então. Poste a mensagem de erro quando você tenta inserir o registro

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 29 de abril de 2008 19:48
  • Segue o erro

     

    'D_Pontual_Paggo' table
    - Unable to create index 'PK_D_Pontual_Paggo'. 
    The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.D_Pontual_Paggo' and the index name 'PK_D_Pontual_Paggo'. The duplicate key value is (5548065, 2847347720, 2188010547).
    Could not create constraint. See previous errors.
    The statement has been terminated.

    terça-feira, 29 de abril de 2008 20:17
  • Olá Daniel,

     

    De fato parece haver um registro duplicado em sua tabela. No entanto estou na dúvida.

    A PK já existe ou você está tentando criá-la ?

     

    Esse erro ocorre quando você dispara o comando de INSERT ?

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 29 de abril de 2008 20:21
  • A PK já existe porém o erro que postei foi somente para exemplificar. Pois eu retirei o indice e inclui na tabela mesmo assim, porém para exemplificar simulei a criação do indice.

     

    O erro acontece no momento do insert

    terça-feira, 29 de abril de 2008 20:33
  • Oi Daniel,

     

    Você pode postar o erro no momento do INSERT na situação real (sem simulações ou recriação de índices) ? Poderia postar também o comando de INSERT ?

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 29 de abril de 2008 20:39
  • Gustavo,

     

    não sei o que aconteceu agora funcionou normalmente.

     

    Acredito que pode ter dado problema, pois na primeira vez eu realizei o insert em 2 etapas e na segunda eu joguei todos os registros em uma unica tabela e retirei a Duplicidade de uma unica vez e realizei o insert posteriormente.

     

    Desde já agradeço pela ajuda

    terça-feira, 29 de abril de 2008 21:00
  • Olá Daniel,

     

    Não sei explicar o que aconteceu mas que bom que resolveu. Verifique se o INSERT foi de fato processado e se a tabela possui de fato o índice

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 29 de abril de 2008 21:06