SSIS Conditional Split – force Chemin par défaut pour lancer Exception

Je lis datatables d'une source dans l'onglet Flux de données.

Les données sont soumises à une division conditionnelle

Ordre 1 -> ColA = "Y"

Ordre 2 -> ColB = "Y"

Si la condition de sortie par défaut est atteinte, n'étant ni ColA ni ColB = "Y" … alors je veux lancer une exception / erreur pour qu'elle frappe le bloc "Fail Component".

Choisissez votre poison et connectez-le à la sortie par défaut.

Le rapide et le sale consiste à attacher une transformation de colonne dérivée et à forcer une division par une erreur nulle.

Ma preference est de router vers un composant Script. Dans le composant de script, je passe dans les keys de gestion des lignes comme ReadOnly. Pour chaque ligne que je vois, je lève un événement d'avertissement, donc j'ai un logging de toutes les "mauvaises" lignes. Dans la méthode PostExecute, si des lignes avaient été envoyées au composant, j'élève alors l'événement OnError pour forcer le stream de données à signaler une erreur au stream de contrôle. Cela satisfera votre besoin d'un contrôle pour basculer vers le "bloc de composant d'échec" et vous serez armé avec suffisamment d'informations dans vos journaux pour searchr datatables Skunky.

Vous vous connectez, n'est-ce pas? (la réponse est oui.) Si vous n'êtes pas le faire: D)

Voici le code que j'utilise quand une search échoue. Mes keys commerciales sont l'ID employé et la date d'input en vigueur. Je les ajoute donc à une list dans la méthode ProcessInput, puis dans PostExecute, je triggers les avertissements / erreurs. Vous pouvez également lever les avertissements dans la méthode ProcessInput et définir un indicateur pour indiquer à PostExecute qu'il doit effectuer une erreur.

public class ScriptMain : UserComponent { List<KeyValuePair<ssortingng, ssortingng>> notFound; public override void PreExecute() { base.PreExecute(); notFound = new List<KeyValuePair<ssortingng, ssortingng>>(); } public override void PostExecute() { base.PostExecute(); foreach (KeyValuePair<ssortingng, ssortingng> kvp in notFound) { ssortingng msg = ssortingng.Format("Research->{0}:{1}", kvp.Key, kvp.Value); ComponentMetaData.FireWarning(0, "Unmatched Employees", msg, ssortingng.Empty, 0); } if (notFound.Count != 0) { bool cancel = true; ComponentMetaData.FireError(0, "SCR Lookup Employee", "Unmatched Employees found. See warning for more context", ssortingng.Empty, 0, out cancel); } } /// <param name="Row">The row that is currently passing through the component</param> public override void Input0_ProcessInputRow(Input0Buffer Row) { KeyValuePair<ssortingng, ssortingng> kvp = new KeyValuePair<ssortingng,ssortingng>(Row.EmployeeID, ssortingng.Format("{0:yyyy-MM-dd}", Row.EffectiveDT)); notFound.Add(kvp); } }