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 .