Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
SSIS Integration Runtime i Azure Data Factory
Även om du inte direkt kan konfigurera en utdata som en felutdata i Script-komponenten för automatisk hantering av felrader, kan du återskapa funktionaliteten hos en inbyggd felutdata genom att skapa en extra utdata och använda villkorlig logik i ditt skript för att styra rader till denna utdata när det är lämpligt. Du kan vilja efterlikna beteendet hos en inbyggd felutdata genom att lägga till två extra utdatakolumner för att ta emot felnumret och ID:t för kolumnen där felet inträffade.
Om du vill lägga till felbeskrivningen som motsvarar en specifik fördefinierad felkod för Integration Services kan du använda GetErrorDescription gränssnittets IDTSComponentMetaData100 metod, tillgänglig via Script-komponentens ComponentMetaData egenskap.
Example
Exemplet som visas här använder en Script-komponent konfigurerad som en transformation som har två synkrona utgångar. Syftet med Script-komponenten är att filtrera felrader från adressdata i AdventureWorks exempeldatabas. Detta fiktiva exempel förutsätter att vi förbereder en kampanj för nordamerikanska kunder och behöver filtrera bort adresser som inte finns i Nordamerika.
För att konfigurera exemplet
Innan du skapar den nya Script-komponenten, skapa en anslutningshanterare och konfigurera en dataflödeskälla som väljer adressdata från AdventureWorks exempeldatabas. För detta exempel, som endast tittar på kolumnen CountryRegionName, kan du helt enkelt använda View.vStateCountryProvinceRegionRegion, eller välja data genom att ansluta till Person.Address, Person.StateProvince och Person.CountryRegion.
Lägg till en ny Script-komponent på Data Flow-designerytan och konfigurera den som en transformation. Öppna redigeraren för skripttransformering.
På Script-sidan , ställ in egenskapen ScriptLanguage till det skriptspråk du vill använda för att koda skriptet.
Klicka på Redigera skript för att öppna Microsoft Visual Studio Verktyg för applikationer (VSTA).
I Input0_ProcessInputRow-metoden , skriv in eller klistra in exempelkoden som visas nedan.
Stäng VSTA.
På sidan Input Columns , välj de kolumner du vill bearbeta i Script-transformationen. Detta exempel använder endast kolumnen CountryRegionName. Tillgängliga inmatningskolumner som du lämnar ovalda kommer helt enkelt att passeras oförändrade i dataflödet.
På sidan Inputs and Outputs , lägg till en ny, andra output och ställ in dess SynchronousInputID-värde till ID:t för inputen, vilket också är värdet på egenskapen SynchronousInputID för standardoutputen. Sätt ExclusionGroup-egenskapen för båda utdata till samma icke-noll värde (till exempel 1) för att indikera att varje rad endast kommer att riktas till en av de två utdatana. Ge det nya felresultatet ett distinkt namn, såsom "MyErrorOutput."
Lägg till ytterligare utdatakolumner till den nya felutmatningen för att fånga önskad felinformation, vilket kan inkludera felkoden, ID:t för kolumnen där felet inträffade och eventuellt felbeskrivningen. Detta exempel skapar de nya kolumnerna, ErrorColumn och ErrorMessage. Om du fångar upp fördefinierade Integration Services-fel i din egen implementation, se till att lägga till en ErrorCode-kolumn för felnumret.
Notera ID-värdet på den eller de indatakolumner som Script-komponenten kontrollerar för fel. Detta exempel använder denna kolumnidentifierare för att fylla i värdet ErrorColumn.
Stäng skripttransformationsredigeraren.
Koppla Script-komponentens utdata till lämpliga destinationer. Platta fildestinationer är lättast att konfigurera för ad hoc-testning.
Kör paketet.
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Row.CountryRegionName <> "Canada" _
And Row.CountryRegionName <> "United States" Then
Row.ErrorColumn = 68 ' ID of CountryRegionName column
Row.ErrorMessage = "Address is not in North America."
Row.DirectRowToMyErrorOutput()
Else
Row.DirectRowToOutput0()
End If
End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.CountryRegionName!="Canada"&&Row.CountryRegionName!="United States")
{
Row.ErrorColumn = 68; // ID of CountryRegionName column
Row.ErrorMessage = "Address is not in North America.";
Row.DirectRowToMyErrorOutput();
}
else
{
Row.DirectRowToOutput0();
}
}