Como Ocorre ?:


Situação ocorre ao efetuar o comando no pervasive de uma empresa : 

  • Alter table lfs_nota_item_compl add column DUMMIE integer default 999#
  • Alter table prg_empresa_btr drop column DUMMIE     

e ele informa the record has a key field containing a duplicate value (btrieve error 5) 

Como identificar o registro duplicado ?:

 

1 - Para realizar a consulta dos registros será necessário realizar o script para identificar os duplicados usando mais de uma coluna como parâmetro para o agrupamento de dados 

SELECT * FROM (

select

                  ntic_id

                , ntic_ano_movimento

                , ntic_fk_nota_item

                , count(1) as qtde

from lfs_nota_item_compl

group by ntic_id, ntic_ano_movimento,ntic_fk_nota_item

) AS duplicados

WHERE qtde > 1

ORDER BY qtde DESC;



2 - Após identificação dos registros é necessário verificar  que a duplicidade se apresenta ao realizar a pesquisa dos registros pelo ntic_fk_nota_item


Abaixo uma consulta mais completa já mostrando as linhas duplicadas ordenadas pelo ntic_fk_nota_item.


SELECT * FROM lfs_nota_item_compl 
WHERE ntic_fk_nota_item IN (
SELECT ntic_fk_nota_item FROM (
select 
    ntic_id 
    , ntic_ano_movimento
    , ntic_fk_nota_item 
    , count(1) as qtde
from lfs_nota_item_compl 
group by ntic_id, ntic_ano_movimento,ntic_fk_nota_item 
) AS duplicados 
WHERE qtde > 1
) ORDER BY ntic_fk_nota_item;



Como um exemplo esta sendo utilizado um registro ,  pode-se ver que de duas em duas elas se duplicam e são iguais em todos os registros.



Como Solucionar ?:

Como solução é necessário executar a busca das linhas duplicadas apenas pelo valor do campo ntic_fk_nota_item uma a uma 

Exemplo:

SELECT * FROM lfs_nota_item_compl

WHERE ntic_fk_nota_item = 91331;


Resultado apresentado:

ntic_id

ntic_ano_movimento

ntic_fk_nota_item

ntic_fk_unid_medida

ntic_exc_icms_piscof

ntic_DescrProd

118951

2023

91331

0

0


118951

2023

91331

0

0




Para remoção foi escolhido o segundo registro apresentado e usado o processo de remoção por dentro da interface do PCC.

Obs.: A remoção do primeiro registro por esse processo ocasiona em erro e não remove o registro, por esse motivo o segundo registro duplicado é usado.

Com isso efetuado a Tabela não possuirá mais duplicidade .



  • Sem rótulos