Erweitern einer Fehlerausgabe mit der Skriptkomponente

Gilt für:SQL Server SSIS Integration Runtime in Azure Data Factory

Standardmäßig enthalten die beiden zusätzlichen Spalten in einer Integration Services-Fehlerausgabe (ErrorCode und ErrorColumn) nur numerische Codes, die eine Fehlernummer darstellen, und die ID der Spalte, in der der Fehler auftrat. Diese numerischen Werte sind ohne die entsprechende Fehlerbeschreibung und den Spaltennamen nur von begrenztem Nutzen.

In diesem Thema wird beschrieben, wie Sie mithilfe der Skriptkomponente den im Datenfluss vorhandenen Fehlerausgabedaten die Fehlerbeschreibung und den Spaltennamen hinzufügen. Im Beispiel wird die Fehlerbeschreibung einem bestimmten vordefinierten Integration Services-Fehlercode hinzugefügt. Dazu wird die GetErrorDescription-Methode der IDTSComponentMetaData100-Schnittstelle verwendet, die von der ComponentMetaData-Eigenschaft der Skriptkomponente bereitgestellt wird. Dann wird im Beispiel mithilfe der GetIdentificationStringByID-Methode derselben Schnittstelle der Spaltenname hinzugefügt, der der erfassten Herkunfts-ID entspricht.

Hinweis

Wenn Sie eine Komponente erstellen möchten, die Sie einfacher in mehreren Datenflusstasks und Paketen wiederverwenden können, empfiehlt es sich, den Code in diesem Skriptkomponentenbeispiel als Ausgangspunkt für eine benutzerdefinierte Datenflusskomponente zu verwenden. Weitere Informationen finden Sie unter Entwickeln einer benutzerdefinierten Datenflusskomponente.

Beispiel

In diesem Beispiel wird gezeigt, wie mit einer Skriptkomponente, die als Transformation konfiguriert ist, den im Datenfluss vorhandenen Fehlerausgabedaten die Fehlerbeschreibung und der Spaltenname hinzugefügt werden.

Weitere Informationen zum Konfigurieren der Skriptkomponente für die Verwendung als Transformation im Datenfluss finden Sie unter Erstellen einer synchronen Transformation mit der Skriptkomponente und Erstellen einer asynchronen Transformation mit der Skriptkomponente .

So konfigurieren Sie dieses Skriptkomponentenbeispiel

  1. Konfigurieren Sie vor dem Erstellen der neuen Skriptkomponente eine Upstreamkomponente im Datenfluss, um Zeilen zur zugehörigen Fehlerausgabe umzuleiten, sobald ein Fehler auftritt oder Daten abgeschnitten werden. Zu Testzwecken sollten Sie eine Komponente so konfigurieren, dass auf jeden Fall Fehler auftreten, beispielsweise, indem Sie eine Transformation zum Suchen zwischen zwei Tabellen konfigurieren, und die Suche einen Fehler meldet.

  2. Fügen Sie der Datenfluss-Designeroberfläche eine neue Skriptkomponente hinzu, und konfigurieren Sie sie als Transformation.

  3. Verbinden Sie die Fehlerausgabe der Upstreamkomponente mit der neuen Skriptkomponente.

  4. Öffnen Sie den Transformations-Editor für Skripterstellung, und wählen Sie auf der Seite Skript für die ScriptLanguage-Eigenschaft die Skriptsprache aus.

  5. Klicken Sie auf Skript bearbeiten, um die IDE der Microsoft Visual Studio-Tools for Applications (VSTA) zu öffnen und den unten dargestellten Beispielcode einzufügen.

  6. Schließen Sie VSTA.

  7. Wählen Sie im Transformations-Editor für Skripterstellung auf der Seite Eingabespalten die Spalten ErrorCode und ErrorColumn aus.

  8. Fügen Sie auf der Seite Eingaben und Ausgaben zwei neue Spalten hinzu.

    • Fügen Sie eine neue Ausgabespalte des Typs Zeichenfolge mit dem Namen ErrorDescription hinzu. Vergrößern Sie die Standardlänge der neuen Spalte auf 255, damit auch lange Meldungen angezeigt werden können.

    • Fügen Sie eine weitere neue Ausgabespalte des Typs Zeichenfolge mit dem Namen ColumnName hinzu. Vergrößern Sie die Standardlänge der neuen Spalte auf 255, damit auch lange Werte angezeigt werden können.

  9. Schließen Sie den Transformations-Editor für Skripterstellung.

  10. Fügen Sie die Ausgabe der Skriptkomponente an ein geeignetes Ziel an. Ein Flatfileziel ist die einfachste Möglichkeit zur Konfiguration bei Ad-hoc-Tests.

  11. Führen Sie das Paket aus.

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);
            }
        }
    }
}

Weitere Informationen

Fehlerbehandlung in Daten
Verwenden von Fehlerausgaben in einer Datenflusskomponente
Erstellen einer synchronen Transformation mit der Skriptkomponente