Sensibilité de la casse pour le transformateur RECHERCHE(LOOKUP)

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