web-dev-qa-db-fra.com

Le fractionnement conditionnel échoue si la valeur est NULL dans SSIS

Je passe le résultat de la jointure FULL Outer aux enregistrements de fractionnement et de filtrage conditionnels sur la base des règles suivantes. Fondamentalement, les deux tables ont le même schéma et les valeurs de clé primaire sont identiques.

a. If Primary key of Source is NULL
b. If Primary Key of Destination is NULL
c. If Source and Destination key matches. 

Cela fonctionne bien pour (a) et (b) mais échoue pour (c)

Source.Id == Destination.Id

et lève une exception pour cette condition évaluée comme NULL là où Boolean était attendu. Comment puis-je faire fonctionner cela?

Le fractionnement conditionnel reçoit une entrée de la fusion et c'est une jointure complète ou externe car j'ai besoin des résultats de la jointure complète ici

Votre troisième condition devrait commencer par une vérification ISNULL avant de comparer vos valeurs. Comme le suivant:

!ISNULL(Source.Id) && !ISNULL(Destination.Id) && Source.Id == Destination.Id

Vous devez gérer chaque colonne qui peut être [~ # ~] nulle [~ # ~] dans votre condition. Puisque vous comparez les identifiants, une autre option serait:

(ISNULL(Source.Id) ? 0 : Source.Id) == (ISNULL(Destination.Id) ? 0 : Destination.Id)

Si vous comparez des chaînes, vous pouvez remplacer les zéros par des espaces vides.

28
Milen Kindekov

Vous pouvez également utiliser la syntaxe suivante:

REPLACENULL(Source.Id,0) == REPLACENULL(Destination.Id,0)
2
Stephane Ehret