Symulowanie komunikatu błędu dla składnika skryptu

Dotyczy:SQL Server Środowisko SSIS Integration Runtime w usłudze Azure Data Factory

Chociaż nie można bezpośrednio skonfigurować wyjścia jako wyjścia błędu w komponencie skryptu do automatycznego przetwarzania wierszy błędu, można odtworzyć funkcjonalność wbudowanego wyjścia błędu, tworząc dodatkowe wyjście i używając logiki warunkowej w skrypcie, aby kierować wiersze na ten wynik, gdy jest to stosowne. Możesz chcieć naśladować zachowanie wbudowanego wyjścia błędu, dodając dwie dodatkowe kolumny wyjściowe, aby otrzymać numer błędu oraz ID kolumny, w której wystąpił błąd.

Jeśli chcesz dodać opis błędu odpowiadający konkretnemu predefiniowanemu kodowi błędu Integration Services, możesz użyć GetErrorDescription metody interfejsu IDTSComponentMetaData100 , dostępnej przez właściwość komponentu ComponentMetaData Script.

Example

Pokazany tutaj przykład wykorzystuje komponent skryptowy skonfigurowany jako transformacja, która ma dwa synchroniczne wyjścia. Celem komponentu Script jest filtrowanie wierszy błędu z danych adresowych w przykładowej bazie danych AdventureWorks. Ten fikcyjny przykład zakłada, że przygotowujemy promocję dla klientów z Ameryki Północnej i musimy odfiltrować adresy, które nie znajdują się w Ameryce Północnej.

Aby skonfigurować przykład

  1. Przed utworzeniem nowego komponentu Script stwórz menedżera połączeń i skonfiguruj źródło przepływu danych, które wybiera dane adresowe z przykładowej bazy danych AdventureWorks. W tym przykładzie, który patrzy tylko na kolumnę CountryRegionName, możesz po prostu użyć widoku Person.vStateCountryProvinceRegion lub wybrać dane, łącząc tabele Person.Address, Person.StateProvince i Person.CountryRegion.

  2. Dodaj nowy komponent skryptu do powierzchni projektanta Przepływ danych i skonfiguruj go jako transformację. Otwórz Edytor przekształceń skryptów.

  3. Na stronie Script ustaw właściwość ScriptLanguage na język skryptu, którego chcesz użyć do kodowania skryptu.

  4. Kliknij Edytuj skrypt, aby otworzyć Microsoft Visual Studio Narzędzia dla aplikacji (VSTA).

  5. W metodzie Input0_ProcessInputRow wpisz lub wklej przykładowy kod pokazany poniżej.

  6. Zamknij VSTA.

  7. Na stronie Kolumny wejściowe wybierz kolumny, które chcesz przetworzyć w transformacji skryptu. Ten przykład używa tylko kolumny CountryRegionName. Dostępne kolumny wejściowe, które zostawiasz niezaznaczone, będą po prostu przekazywane bez zmian w przepływie danych.

  8. Na stronie Wejścia i Wyjścia dodaj nowy, drugi wyjść i ustaw jego wartość SynchronousInputID na identyfikator wejścia, który jest jednocześnie wartością właściwości SynchronousInputID domyślnego wyjścia. Ustaw właściwość ExclusionGroup obu wyjść na tę samą niezerową wartość (na przykład 1), aby wskazać, że każdy wiersz będzie kierowany tylko do jednego z dwóch wyjść. Nadaj nowemu wyjściu błędu charakterystyczną nazwę, na przykład "MyErrorOutput".

  9. Dodaj dodatkowe kolumny wyjściowe do nowego wyjścia błędu, aby uchwycić pożądane informacje o błędzie, które mogą obejmować kod błędu, identyfikator kolumny, w której wystąpił błąd, a także ewentualnie opis błędu. Ten przykład tworzy nowe kolumny: ErrorColumn i ErrorMessage. Jeśli wykrywasz błędy zdefiniowanych usług integracyjnych w swojej własnej implementacji, upewnij się, że dodasz kolumnę ErrorCode dla numeru błędu.

  10. Zwróć uwagę na wartość ID kolumny wejściowej lub kolumn, które komponent Script sprawdzi pod kątem błędów. Ten przykład wykorzystuje ten identyfikator kolumny do wypełnienia wartości ErrorColumn.

  11. Zamknij edytor transformacji skryptów.

  12. Dołącz wyjścia komponentu Script do odpowiednich miejsc docelowych. Miejsca docelowe plików płaskich są najłatwiejsze do skonfigurowania do testów ad hoc.

  13. Uruchom pakiet.

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