Amélioration d'une sortie d'erreur à l'aide du composant Script

S’applique à :SQL Server SSIS Integration Runtime dans Azure Data Factory

Par défaut, les deux colonnes supplémentaires d'une sortie d'erreur Integration Services, ErrorCode et ErrorColumn, contiennent uniquement des codes numériques identifiant un numéro d'erreur et l'ID de la colonne dans laquelle l'erreur est survenue. Ces valeurs numériques peuvent se révéler d’une utilité limitée en l’absence de la description d’erreur et du nom de colonne correspondants.

Cette rubrique décrit comment ajouter la description d’erreur et le nom de colonne à des données de sortie d’erreur existantes dans le flux de données en utilisant le composant Script. L'exemple ajoute la description d'erreur qui correspond à un code d'erreur Integration Services prédéfini spécifique à l'aide de la méthode GetErrorDescription de l'interface IDTSComponentMetaData100, disponible via la propriété ComponentMetaData du composant Script. Le nom de colonne qui correspond à l’ID de lignage capturé est ensuite ajouté à l’aide de la méthode GetIdentificationStringByID de la même interface.

Notes

Si vous souhaitez créer un composant que vous pouvez réutiliser plus facilement dans plusieurs tâches de flux de données et plusieurs packages, utilisez le code présenté dans cet exemple de composant Script comme point de départ pour un composant de flux de données personnalisé. Pour plus d’informations, consultez Développement d’un composant de flux de données personnalisé.

 Exemple

L’exemple indiqué ici utilise un composant Script configuré en tant que transformation pour ajouter la description d’erreur et le nom de colonne à des données de sortie d’erreur existantes dans le flux de données.

Pour plus d’informations sur la configuration du composant Script en vue de son utilisation comme transformation dans le flux de données, consultez Création d’une transformation synchrone à l’aide du composant Script et Création d’une transformation asynchrone à l’aide du composant Script.

Pour configurer cet exemple de composant Script

  1. Avant de créer le composant Script, configurez un composant en amont dans le flux de données pour rediriger des lignes vers sa sortie d'erreur lorsqu'une erreur ou troncation se produit. À des fins de test, vous pouvez configurer un composant de manière à garantir que des erreurs se produiront, par exemple en configurant une transformation de recherche entre deux tables où la recherche échouera.

  2. Ajoutez un nouveau composant Script à l'aire du concepteur de flux de données et configurez-le en tant que transformation.

  3. Connectez la sortie d'erreur du composant en amont au nouveau composant Script.

  4. Ouvrez l’Éditeur de transformation de script, puis dans la page Script, au niveau de la propriété ScriptLanguage, sélectionnez le langage de script.

  5. Cliquez sur Modifier le script pour ouvrir l’environnement de développement intégré Microsoft Visual Studio Tools for Applications (VSTA) et ajouter l’exemple de code indiqué ci-dessous.

  6. Fermez VSTA.

  7. Dans l’Éditeur de transformation de script, dans la page Colonnes d’entrée, sélectionnez les colonnes ErrorCode et ErrorColumn.

  8. Dans la page Entrées et sorties, ajoutez deux nouvelles colonnes.

    • Ajoutez une nouvelle colonne de sortie de type String nommée ErrorDescription. Augmentez la longueur par défaut de la nouvelle colonne à 255 pour prendre en charge les longs messages.

    • Ajoutez une autre nouvelle colonne de sortie de type String nommée ColumnName. Augmentez la longueur par défaut de la nouvelle colonne à 255 pour prendre en charge les longues valeurs.

  9. Fermez l’Éditeur de transformation de script.

  10. Attachez la sortie du composant Script à une destination appropriée. Les destinations de fichiers plats sont les plus faciles à configurer à des fins de test ad hoc.

  11. Exécutez le package.

Public Class ScriptMain      ' VB
    Inherits UserComponent
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        Row.ErrorDescription = _
            Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)

        Dim componentMetaData130 = TryCast(Me.ComponentMetaData, IDTSComponentMetaData130)

        If componentMetaData130 IsNot Nothing Then

            If Row.ErrorColumn = 0 Then
                ' 0 means no specific column is identified by ErrorColumn, this time.
                Row.ColumnName = "Check the row for a violation of a foreign key constraint."
            ELSE If Row.ErrorColumn = -1 Then
                ' -1 means you are using Table Lock for a Memory Optimised destination table which is not supported.
                Row.ColumnName = "Table lock is not compatible with Memory Optimised tables."
            Else
                Row.ColumnName = componentMetaData130.GetIdentificationStringByID(Row.ErrorColumn)
            End If
        End If
    End Sub
End Class
public class ScriptMain:      // C#
    UserComponent
{
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);

        var componentMetaData130 = this.ComponentMetaData as IDTSComponentMetaData130;
        if (componentMetaData130 != null)
        {
            // 0 means no specific column is identified by ErrorColumn, this time.
            if (Row.ErrorColumn == 0)
            {
                Row.ColumnName = "Check the row for a violation of a foreign key constraint.";
            }
            // -1 means you are using Table Lock for a Memory Optimised destination table which is not supported.
            else if (Row.ErrorColumn == -1)
            {
                Row.ColumnName = "Table lock is not compatible with Memory Optimised tables.";
            }
            else
            {
                Row.ColumnName = componentMetaData130.GetIdentificationStringByID(Row.ErrorColumn);
            }
        }
    }
}

Voir aussi

Gestion des erreurs dans les données
Utilisation de sorties d'erreur dans un composant de flux de données
Création d'une transformation synchrone à l'aide du composant Script