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 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 !