Mon Lookup ne matche plus

Un nouveau post rapide pour une problématique que vous pouvez rencontrer avec les Lookup Transformations dans SSIS.

Problème : les données semblent égales et pourtant le Lookup n’arrive pas à matcher. Fait perturbant, si vous passez le mode de cache en No Cache, ça marche…

image

Solution :

Le problème vient des types de données. Dans mon exemple, j’ai un NUMERIC(6,0) d’un côté et un NUMERIC(18,2) de l’autre.

En mode cache, c’est SSIS qui fait la comparaison et sa représentation interne dans son cache et ses buffers est fortement liée par les types. Ainsi la comparaison “binaire” (certes optimisée) échoue et les données ne matchent pas.

En mode “No Cache”, c’est SQL Server qui fait la comparaison et là intervient un transtypage (CAST) implicite. Dans notre exemple, la comparaison d’un NUMERIC(6,0) et d’un NUMERIC(18,2) fonctionne et c’est pour cela que le Lookup matche les données.

Mon exemple utilise des types numériques mais on a le même problème avec les chaines de caractère en fonction de la COLLATION (et du Codepage sur SSIS).

PS : notez également que le Lookup est Case Sensitive !

Conclusion :

Soyez vigilant sur les types et essayez de coller au mieux (pour faire simple, utilisez exactement les mêmes).

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s