janvier 17, 2011 18:15 by
Thomas
J'ai
été confronté ce matin à un problème sur l'éditeur de
transformation « Recherche ».
En
effet pour un de nos clients nous récupérons, sur plusieurs bases
ACCESS crées par le logiciel de comptabilité « QUADRA »,
l'ensemble des données comptables que nous réinjectons toutes les
nuits dans un DataWarehouse. Pour
ce faire nous récupérons la liste des comptes de toutes les bases,
que nous insérons dans une table commune « PlanComptable »
du DataWarehouse, en testant si le compte n'existe pas déjà. Nous
avons une clé primaire sur le numéro de compte.
Voici
le schéma SSIS en image qui vaut mieux que 3heures de discours !
En
gros, on récupère tous les comptes sur toutes bases « QUADRA »,
on recherche si le compte existe dans le DataWarehouse, s'il n'existe
pas on l'insère. L'éditeur de transformation Recherche est
configuré comme suit:
Seulement
voilà, malgré une conception optimale(Et oui parfois faut bien
s'envoyer des roses!), on peut rencontrer un problème du genre
« Violation de clé primaire » lors de l'insertion des
données.
En
effet, lorsque l'on a sur une base un numéro de compte = 'AAEEEEAA'
(inséré dans le DataWarehouse) et sur une autre base le compte =
'AaeeeeAA', et bien, oh la mauvaise blague!! Le lookup les considère
différents alors que SQL SERVER les considère identiques. D'où
la fameuse Violation de clé primaire !!
Plusieurs
solutions se présentent à nous, soit on passe tous les numéros de
comptes entièrement en majuscules ou entièrement en minuscules
dans la requête directement, soit dans le paquet par le biais d'une
colonne dérivée.
Solution
1 :
select
UCASE(Numero) as Numero, Type, Intitule from
Compte
UCASE(ACCESS)
est l'équivalent de UPPER en SQL SERVER
Solution
2 :
Actuellement noté 5.0 par 1 personne(s)
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5