Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Impossible d'ajouter un index unique sur les pieds (journal, id)

0000002710     -      30/06/2017

La vérification de structure de la base de données de Mercator, dans les outils avancés, tente d'installer un index unique sur le table des pieds (PIEDS_V, PIEDS_A, PIEDS_C), dont l'expression est JOURNAL,ID. L'objet de celui-ci est d'assurer l'unicité de la colonne ID par valeur de JOURNAL. En effet, cette combinaison est utilisée pour déterminer le répertoire des fichiers associés aux documents de la gestion commerciale ou aux écritures comptables. 

Si cette unicité n'est pas satisfaite, il sera impossible d'ajouter l'index unique. Les requêtes ci-dessous sont données pour PIEDS_V. Elles peuvent être facilement adaptées pour les 2 autres tables.

L'index que Mercator tente d'installer est le suivant :

create unique index PIEDS_V_UNIQUE_ID_PER_JOURNAL on dbo.PIEDS_V (JOURNAL, ID)

La requête suivante permet de lister les doublons :

select id,journal,count(*) from PIEDS_V group by id,journal having count(*)>1

Afin d'appliquer le correctif ci-dessous, il est nécessaire d'active la cascade update sur la contrainte de clé étrangère entre PIEDS_V et LIGNES_V (FK_LIGNES_V_PIEDS).

Si celle-ci n'est pas déjà active, cela peut se faire en exécutant cette requête :

alter table dbo.LIGNES_V drop constraint FK_LIGNES_V_PIEDS
GO
alter table dbo.LIGNES_V add constraint FK_LIGNES_V_PIEDS FOREIGN KEY (id,journal,piece) references pieds_v (id,journal,piece) on update cascade
alter table dbo.LIGNES_V CHECK CONSTRAINT FK_LIGNES_V_PIEDS 

La requête suivante permet de corriger les doublons, en préservant l'ID du premier document et en changeant les suivants :

select * into #pied_doublons_tmp from (
select id,journal,piece,ROW_NUMBER() OVER(PARTITION BY id,journal order by id,journal,piece) as n from PIEDS_V
) t where t.n>1

update PIEDS_V set id=right(newid(),10) from #pied_doublons_tmp p
where (pieds_v.id=p.id) and (pieds_v.journal=p.journal) and (pieds_v.piece=p.piece)

drop table #pied_doublons_tmp

Nous recommandons d'effectuer cette correction sous transaction et après avoir effectué un backup de la base de données.

Nous attirons votre attention sur le fait, qu'en cas de doublons (par exemple A, B et C) et si des fichiers sont attachés aux documents/écritures :

  • avant la correction, tous les fichiers attachés étaient présentés dans un même objet"explorateurs de fichiers". Dans les documents A, B et C, on voyait l'ensemble des fichiers attachés à A, B ou C.
  • après la correction, les fichiers attachés seront uniquement visibles dans A. Il n'y aura plus de fichiers attachés dans B et C.

En conséquence, il peut être nécessaire de reclasser les fichiers manuellement.


Mots clés : vérifier structure