Quando a falha ocorre?
Na rotina de CIAP/CIAF, retorna o erro -2147217887 - Uma coluna que não permite valor nulo não pode ser atualizada para Null. Erro na rotina que carrega os dados nos grids do sistema.
Como corrigir o erro?
Na respectiva empresa com problema, execute o script
1- execute o script baixo para excluir os índices da tabela, importante executar linha por linha
--DELETANDO INDEX
DROP INDEX "ciapbemEEEE"."iciapbemEEEE1"
DROP INDEX "ciapbemEEEE"."iciapbemEEEE2"
DROP INDEX "ciapempEEEE"."iciapempEEEE1"
DROP INDEX "bemEEEE"."ibemEEEE1"
Depois execute o script abaixo para recriar o índice, importante executar linha por linha
– RECRIANDO INDEX
CREATE UNIQUE INDEX "iciapempEEEE1" ON "ciapempEEEE"("fk_empresa_id", "mesano", "fracao");
CREATE UNIQUE INDEX "iciapbemEEEE1" ON "ciapbemEEEE"("id", "mesano");
--Se nesse momento der erro ao recriar "iciapbemEEEE2" (Btrieve error 5), rode o script para retornar a quantidade de registro em duplicidade e logo após execute o script para excluir os registros excedentes! Depois retorne e tente criar novamente os índices a partir daqui)
CREATE UNIQUE INDEX "iciapbemEEEE2" ON "ciapbemEEEE"("fk_bem", "mesano");
CREATE UNIQUE INDEX "ibemEEEE1" ON "bemEEEE"("fk_empresa_id", "codigo");
– retorna quantidade de registros duplicados
select fk_bem, mesano, count(1) as quantidade from ciapbemEEEE
group by fk_bem, mesano order by quantidade desc
Caso haja, execute o script abaixo, que irá excluir os registros excedentes
DELETE FROM ciapbemEEEE
WHERE id IN (
SELECT X.id FROM (
SELECT distinct
a.id, a.fk_bem, a.mesano
FROM
(
SELECT
c.ID, c.fk_bem, c.mesano
FROM (
select
fk_bem, mesano, count(1) as qtde
from "ciapbemEEEE"
group by fk_bem, mesano
) AS DUPS
INNER JOIN ciapbemEEEE C ON C.fk_bem = DUPS.fk_bem and C.mesano = DUPS.mesano
WHERE DUPS.qtde > 1
) A
INNER JOIN
(
SELECT
c.ID, c.fk_bem, c.mesano
FROM (
select
fk_bem, mesano, count(1) as qtde
from "ciapbemEEEE"
group by fk_bem, mesano
) AS DUPS
INNER JOIN ciapbemEEEE C ON C.fk_bem = DUPS.fk_bem and C.mesano = DUPS.mesano
WHERE DUPS.qtde > 1
) B on B.fk_bem = A.fk_bem
WHERE a.id > b.id
) AS X
);