J'ai un flux de données SSIS qui utilise une recherche. Parfois, la valeur à regarder (dans mon ruisseau, pas dans la table de recherche) est null. P>
Le Documents MSDN Dites : P>
envisagez d'utiliser la mise en cache complète, qui prend en charge les opérations de recherche sur les valeurs NULL. P> blockQuote>
J'utilise la mise en cache complète (c'est la valeur par défaut). P>
Mais quand je cours, je reçois cette erreur sur mes lignes NULL: p>
ligne n'a donné aucune correspondance pendant la recherche p> blockQuote>
Si je change le résultat pour ignorer les matchs sans correspondance, cela fonctionne bien. Mais cela ignore tous les matches. Je veux juste permettre aux nulls (comme null). Tout autre no-match doit échouer sur le composant. P>
Qu'est-ce que je fais mal? Comment puis-je obtenir des NULLS pour écrire comme nulls, mais non ignorer d'autres erreurs. P>
p>
p>
(Remarque: j'ai vérifié la table de regarder ma liste de recherche. Il a toutes les valeurs qui sont dans ma table source. Il n'a tout simplement pas nul comme valeur (car il est étrange d'avoir une valeur de recherche pour NULL. ) p>
4 Réponses :
Je n'avais jamais remarqué cette ligne dans Bol sur le mode de cache complet. La réponse à votre problème est ce que vous avez déjà indiqué avoir NULL dans l'ensemble de données de référence. Une preuve rapide serait ces deux flux de données d'échantillons. P>
Dans cet exemple, je génère 4 lignes de données: 1, 2, 3 et null (colonne_isnull = true) et appuyez sur une table de mémoire qui a toutes les valeurs et effectuez une recherche entre la colonne dans le flux de données et C1 défini dans la table en mémoire. Il souffle comme vous avez décrit p>
p>
J'ai ensuite ajouté une valeur de plus à la table de recherche, Null et Voila, la recherche de cache complète est capable de faire correspondre Null à Null. P>
p>
Pour créer une correspondance de la valeur de saisie NULL dans un composant de recherche, le jeu de données de référence doit avoir une valeur nulle correspondante disponible, ainsi que le mode de cache défini sur Full. p>
C'est ce que j'avais peur de. Je ne veux vraiment pas avoir à faire une recherche juste pour voir que la valeur est null. C'est NULL, il ne correspond pas à NULL. Semantitique Je sais, mais pas la façon dont je veux concevoir ma base de données.
Pour contourner ce problème au sein des SSIS, il existe une approche alternative d'une précédente afin de répondre à la réponse qui peut être appliquée. p>
Dans la transformation de la recherche, vous pouvez rediriger les lignes de l'erreur, puis les transmettre à une autre destination qui peut simplement être la même table de destination de votre base de données. p>
Par conséquent, votre table de destination dans la base de données recevra toujours toutes les lignes (477 à l'écran ci-dessous). P>
Cette approche évite donc la nécessité de mettre des valeurs nominales factices dans votre table de recherche au sein de votre base de données, le commerce étant: p>
p>
Vous pouvez utiliser une scission conditionnelle pour casser les données en deux séries, l'une où la valeur donnée est null et le reste. Effectuez la recherche sur la sortie qui comporte des valeurs non nulles, puis combinez les résultats avec le jeu de données contenant les valeurs NULL à l'aide d'un syndicat tout. Vous pouvez toujours piéger pour des valeurs inégalées à la recherche et ne vous inquiétez pas de devoir ajouter une entrée NULL à votre table de recherche p>
J'ai utilisé la solution de recherche nulle (mentionnée ci-dessus) dans le passé, mais j'aime cette solution car elle est très explicite et ne nécessite pas de creuser dans d'autres composants pour trouver les recherches nulles. Je vais donner à cela un nouveau paquet que j'écris et que je vois comment ça se sent.
Je sais que c'est une réponse tardive, mais pour toute personne qui cherche à ce sujet, j'ai trouvé que ceci comme la réponse la plus simple:
Dans la connexion de recherche, utilisez une requête SQL pour récupérer vos données et ajouter Par exemple: P> Union Select null, null code> en bas. P>
SELECT CarId, CarName FROM Cars
UNION SELECT NULL, NULL
C'est une solution très pragmatique qui évite "encombrer" le dataflow avec des composants supplémentaires.