SSIS de Recherche n'est pas de traiter avec des valeurs Null comme les docs disent qu'il devrait
J'ai un flux de données SSIS qui utilise une recherche. Parfois la valeur d'être regardé (dans mon flux, pas dans la table de recherche) est nulle.
La MSDN Docs dire:
envisager d'utiliser la pleine mise en cache, qui prend en charge les opérations de recherche sur les valeurs null.
Je suis en utilisant la Pleine mise en Cache (c'est la valeur par défaut).
Mais quand je le lance, j'obtiens cette erreur sur mon null lignes:
Ligne n'a donné aucun match durant de recherche
Si je change le résultat de l'ignorer sans les matchs alors qu'il fonctionne très bien. Mais qui ignore toutes les non-correspondances. Je veux juste autoriser les valeurs null par (null). Tout autre non-match de panne du composant.
Ce que je fais mal? Comment puis-je obtenir les valeurs null à écrire que les valeurs null, mais ne pas ignorer tous les autres erreurs.
(NOTE: j'ai vérifié mon look up table. Il dispose de TOUTES les valeurs qui sont dans ma table source. Il n'a tout simplement pas avoir la valeur NULL (parce que c'est bizarre d'avoir une valeur null.)
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est une réponse tardive, mais pour toute personne à la recherche sur ce, comme je l'étais, j'ai trouvé ceci pour être la réponse la plus simple:
Dans la recherche de la connexion, utiliser une requête SQL pour récupérer vos données et de les ajouter
UNION SELECT NULL, NULL
vers le bas.Par exemple:
Aperçu affiche une ligne supplémentaire de
CarId = Null
etCarName = Null
qui sera disponible dans le lookpup.Je n'avais jamais remarqué que la ligne de BOL sur le mode cache complet. La réponse à votre problème est que vous avez déjà dit sur le fait d'avoir la valeur NULL dans la référence de l'ensemble de données. Une preuve rapide serait ces deux exemples de flux de données.
Dans cet exemple, j'ai de générer de 4 lignes de données: 1, 2, 3, et NULL (Column_isNull = true) et appuyez sur une table en mémoire qui a toutes les valeurs et effectuer une recherche entre la Colonne dans le flux de données et c1 définie dans la table en mémoire. Il souffle comme vous l'avez décrit
J'ai ensuite ajouté un plus de valeur à la table de recherche, NULL, et le tour est joué, la recherche dans le cache est en mesure de faire correspondre la valeur NULL NULL.
Emporter
De faire un NULL la valeur d'entrée de match dans une recherche de composant, le jeu de données de référence doit avoir une correspondante de la valeur NULL disponibles ainsi que le cache en mode PLEIN.
Pour contourner ce problème dans SSIS, il existe une approche alternative à une précédente DONC réponse qui peut être appliquée.
Dans la Transformation de Recherche, vous pouvez rediriger les lignes en erreur et puis de les transmettre à une autre destination qui peut être simplement la même table de destination à l'intérieur de votre base de données.
Donc de votre table de destination à l'intérieur de la base de données continuent de recevoir toutes les lignes (477 dans la capture d'écran ci-dessous).
Cette approche permet donc d'éviter la nécessité de mettre factice des valeurs NULL dans votre table de recherche au sein de votre base de données, avec les compromis en cours:
Vous pouvez utiliser un Conditionnel Split pour briser les données en deux ensembles, l'un où la valeur est null et le reste. Seulement effectuer la recherche sur la sortie qui a des valeurs non nulles et de combiner les résultats avec l'ensemble de données qui contient les valeurs null à l'aide d'un Union All. Vous pouvez toujours le piège d'une des valeurs de la recherche et de ne pas s'inquiéter d'avoir à ajouter une valeur null pour votre table de recherche