3 votes

SSIS OLE DB Destination - Erreur de redirection de sortie sans description

Je vis quelque chose de bizarre. J'ai une tâche de flux de données dans un paquet SSIS avec une source OLE DB qui récupère les données d'une table - puis il y a une transformation Lookup qui vérifie si la clé de rangée existe déjà dans la table de destination (clé primaire dans la table de destination) puis la sortie Lookup No match est connectée à la destination OLE DB. J'ai également connecté la sortie d'erreur de la destination OLE DB à un composant script qui obtient le message d'erreur et la colonne d'erreur au cas où quelque chose se passe mal et insère ces données dans une table d'exception.

Le problème auquel je suis confronté est que j'ai des clés de rangées dupliquées dans ma table source. Dans ce cas, l'erreur est redirigée de la destination OLE DB vers ma table d'exception. mais la description de l'erreur que j'obtiens dans le tableau des exceptions est "No status is available" au lieu de "Violation of PRIMARY KEY constraint Cannot insert duplicate key in object The duplicate key value is ". Voici une capture d'écran du paquet enter image description here et voici le code script :

public bool fireAgain = true;
public string customErrorDescription;
public string customErrorDescription;
public string ErrorDescription;
public string ErrorColumnDescription;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
try
{
    var component130 = ComponentMetaData as IDTSComponentMetaData130;

    if (component130 != null)
    {
        Row.DateTimeInserted = DateTime.Now;

        if (Row.ErrorColumn <= 0)
        {
            ErrorColumnDescription = "No Data available - Unknown Error";
        }
        else if (Row.ErrorColumn > 0)
        {

            ErrorColumnDescription = component130.GetIdentificationStringByID(Row.ErrorColumn);
        }
        ErrorDescription = component130.GetErrorDescription(Row.ErrorCode).Replace("\r\n", " ");

        //Writes the error as Information in Logging
        customErrorDescription =
         $"Error in OLE DB Destination:{ErrorDescription}" +
         $"In Column: {ErrorColumnDescription}";
        ComponentMetaData.FireInformation(10, "Error", "Error", ErrorDescription, 0, fireAgain);

        Row.ErrorDescription = ErrorDescription;
        Row.ErrorColumnDescription = ErrorColumnDescription;
        Row.DestinationTableName = Variables.DestinationTable;
        Row.SourceName = "Source_View";
        Row.SourceType = "View";
    }
}
catch (Exception Ex)
{
    ComponentMetaData.FireError(10, "Error", Ex.Message, Ex.Message, 0, out fireAgain);
}

}

J'aimerais mentionner que dans d'autres erreurs comme la troncature ou l'insertion de null dans une colonne où null n'est pas autorisé, cela semble fonctionner correctement.

Par exemple En troncature, j'obtiens : "La conversion a échoué car la valeur des données a dépassé le type utilisé par le fournisseur". Dans la violation de la contrainte NULL, j'obtiens : "La valeur des données viole les contraintes d'intégrité."

Avez-vous des suggestions ou des réflexions sur la raison pour laquelle ce problème ne se produit qu'avec l'insertion de la clé Dublicate ? Merci d'avance !

0voto

Hadi Points 16319

Vous devez savoir que deux types de validations sont effectuées dans OLE DB Destination : (1) côté client et (2) côté serveur. Vous pouvez consulter la réponse suivante pour plus de détails :

Le moteur SSIS ne saisit pas les descriptions des erreurs côté serveur (clés étrangères, triggers...) au moment de l'exécution alors que les descriptions des erreurs de validation côté client (troncature, Not null...) sont lisibles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X