Ottimizzazione di un output degli errori con il componente script

Si applica a: SQL Server SSIS Integration Runtime in Azure Data Factory

Per impostazione predefinita, le due colonne supplementari in un output degli errori di Integration Services, ovvero ErrorCode e ErrorColumn, contengono solo codici numerici che rappresentano un numero di errore, nonché l'ID della colonna in cui si è verificato l'errore. Tali valori numerici possono avere un'utilità limitata senza la descrizione dell'errore e il nome della colonna corrispondenti.

In questo argomento viene descritto come aggiungere la descrizione dell'errore e il nome della colonna ai dati dell'output degli errori esistente nel flusso di dati tramite il componente script. Nell'esempio viene aggiunta la descrizione dell'errore che corrisponde a un codice di errore specifico predefinito di Integration Services usando il metodo GetErrorDescription dell'interfaccia IDTSComponentMetaData100 disponibile tramite la proprietà ComponentMetaData del componente script. Nell'esempio viene poi aggiunto il nome della colonna che corrisponde all'ID di derivazione acquisito tramite il metodo GetIdentificationStringByID della stessa interfaccia.

Nota

Se si desidera creare un componente da riutilizzare più facilmente con più attività Flusso di dati e più pacchetti, è possibile utilizzare il codice di questo esempio di componente script come punto iniziale per un componente del flusso di dati personalizzato. Per altre informazioni, vedere Sviluppo di un componente del flusso di dati personalizzato.

Esempio

Nell'esempio illustrato viene usato un componente script configurato come trasformazione per aggiungere la descrizione dell'errore e il nome della colonna ai dati dell'output degli errori esistente nel flusso di dati.

Per altre informazioni su come configurare il componente script per usarlo come trasformazione nel flusso di dati, vedere Creazione di una trasformazione sincrona con il componente script e Creazione di una trasformazione asincrona con il componente script.

Per configurare l'esempio di componente script

  1. Prima di creare il nuovo componente script, configurare un componente a monte nel flusso di dati per reindirizzare righe all'output degli errori quando si verifica un errore o un troncamento. A scopo di test, è possibile configurare un componente in modo da assicurarsi che si verificheranno errori, ad esempio configurando una trasformazione Ricerca tra due tabelle in cui la ricerca avrà esito negativo.

  2. Aggiungere un nuovo componente script all'area di progettazione del flusso di dati e configurarlo come trasformazione.

  3. Connettere l'output degli errori del componente a monte a questo nuovo componente script.

  4. Aprire Editor trasformazione Script e nella pagina Script selezionare il linguaggio di scripting per la proprietà ScriptLanguage.

  5. Fare clic su Modifica script per aprire l'IDE di Microsoft Visual Studio Tools for Applications (VSTA) e aggiungere il codice di esempio riportato di seguito.

  6. Chiudere VSTA.

  7. Nella pagina Colonne di input dell'Editor trasformazione Script selezionare le colonne ErrorCode e ErrorColumn.

  8. Nella pagina Input e output aggiungere due nuove colonne.

    • Aggiungere una nuova colonna di output di tipo Stringa denominata ErrorDescription. Aumentare la lunghezza predefinita della nuova colonna fino a 255 per supportare messaggi lunghi.

    • Aggiungere un'altra nuova colonna di output di tipo Stringa denominata ColumnName. Aumentare la lunghezza predefinita della nuova colonna fino a 255 per supportare valori lunghi.

  9. Chiudere l'Editor trasformazione Script.

  10. Connettere l'output del componente script a una destinazione appropriata. Le destinazioni file flat sono le più facili da configurare per test ad hoc.

  11. Eseguire il pacchetto.

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

Vedi anche

Gestione degli errori nei dati
Uso degli output degli errori in un componente flusso di dati
Creazione di una trasformazione sincrona con il componente script