Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak dynamicznie mapować kolumny wejściowe i wyjściowe w SSIS?

Jeśli utworzysz podobną tabelę, możesz użyć jej w 2 podejściach do dynamicznego mapowania kolumn w pakiecie SSIS lub musisz programowo zbudować cały pakiet. W tej odpowiedzi postaram się dać ci kilka wskazówek, jak to zrobić.

(1) Budowanie źródłowego polecenia SQL z aliasami

Uwaga:to podejście będzie działać tylko wtedy, gdy wszystkie pliki .dbf mają tę samą liczbę kolumn, ale nazwy są różne

W tym podejściu wygenerujesz polecenie SQL, które będzie używane jako źródło na podstawie identyfikatora pliku i utworzonej tabeli mapowania. Musisz wiedzieć, czy FileID i ścieżka do pliku .dbf są przechowywane w zmiennej. jako przykład:

Zakładając, że nazwa tabeli to inputoutputMapping

Dodaj wykonanie zadania SQL za pomocą następującego polecenia:

DECLARE @strQuery as VARCHAR(4000)

SET @strQuery = 'SELECT '

SELECT @strQuery = @strQuery + '[' + InputColumn + '] as [' + OutputColumn + '],'
FROM inputoutputMapping
WHERE FileID = ?

SET @strQuery = SUBSTRING(@strQuery,1,LEN(@strQuery) - 1) + ' FROM ' + CAST(? as Varchar(500))

SELECT @strQuery

A na karcie Mapowanie parametrów wybierz zmienną zawierającą identyfikator pliku, który ma zostać zmapowany do parametru 0 oraz zmienną zawierającą nazwę pliku .dbf (alternatywa dla nazwy tabeli) do parametru 1

Ustaw typ ResultSet na Single Row i zapisz zestaw wyników 0 wewnątrz zmiennej typu string jako przykład @[User::SourceQuery]

Wartość ResultSet będzie następująca:

SELECT [CustCd] as [CustCode],[CNAME] as [CustName],[Address] as [CustAdd] FROM database1

W OLEDB Source wybierz tryb dostępu do tabeli na polecenie SQL ze zmiennej i użyj @[User::SourceQuery] zmienna jako źródło.

(2) Używanie komponentu skryptu jako źródła

W tym podejściu musisz użyć komponentu skryptu jako źródła w zadaniu przepływu danych:

Przede wszystkim musisz przekazać ścieżkę pliku .dbf i połączenie SQL Server do komponentu skryptu za pomocą zmiennych, jeśli nie chcesz ich na stałe kodować.

W edytorze skryptów musisz dodać kolumnę wyjściową dla każdej kolumny znalezionej w tabeli docelowej i zmapować je na miejsce docelowe .

Wewnątrz skryptu musisz wczytać plik .dbf do tabeli danych:

  • C# Czytaj z plików .DBF do tabeli danych
  • Załaduj DBF do DataTable

Po załadowaniu danych do tabeli danych, wypełnij również inną tabelę danych danymi znalezionymi w tabeli mapowania utworzonej w SQL Server.

Następnie przejdź przez kolumny tabeli danych i zmień .ColumnName do odpowiedniej kolumny danych wyjściowych, na przykład:

foreach (DataColumn col in myTable.Columns)
    {

    col.ColumnName = MappingTable.AsEnumerable().Where(x => x.FileID = 1 && x.InputColumn = col.ColumnName).Select(y => y.OutputColumn).First(); 

    }

Po pętli nad każdym wierszem w tabeli danych i utwórz wiersz wyjściowy skryptu.

Ponadto należy pamiętać, że podczas przypisywania wierszy wyjściowych należy sprawdzić, czy kolumna istnieje, można najpierw dodać nazwy wszystkich kolumn do listy ciągu, a następnie użyć tego do sprawdzenia, na przykład:

var columnNames = myTable.Columns.Cast<DataColumn>()
                             .Select(x => x.ColumnName)
                             .ToList();  


foreach (DataColumn row in myTable.Rows){

if(columnNames.contains("CustCode"){

    OutputBuffer0.CustCode = row("CustCode");

}else{

    OutputBuffer0.CustCode_IsNull = True

}

//continue checking all other columns

}

Jeśli potrzebujesz więcej informacji na temat używania komponentu skryptów jako źródła, sprawdź jeden z następujących łączy:

  • Składnik skryptów SSIS jako źródło
  • Tworzenie źródła za pomocą komponentu skryptu
  • Komponent skryptu jako źródło – SSIS
  • SSIS – UŻYWANIE KOMPONENTU SKRYPTU JAKO ŹRÓDŁA

(3) Dynamiczne budowanie pakietu

Nie sądzę, że istnieją inne metody, których możesz użyć do osiągnięcia tego celu, z wyjątkiem tego, że masz możliwość dynamicznego zbudowania pakietu, wtedy powinieneś skorzystać z:

  • BIML
  • Model obiektów zarządzanych usług integracyjnych
  • Biblioteka EzApi

(4) SchemaMapper:biblioteka klas mapowania schematów C#

Niedawno rozpocząłem nowy projekt na Git-Hub, który jest biblioteką klas stworzoną w C#. Możesz go użyć do importowania danych tabelarycznych z programu Excel, word, PowerPoint, text, csv, html, json i xml do tabeli serwera SQL z inną definicją schematu przy użyciu podejścia mapowania schematu. sprawdź to na:

  • SchemaMapper:Biblioteka klas mapowania schematów C#

Możesz śledzić tę stronę Wiki, aby uzyskać przewodnik krok po kroku:

  • Importuj dane z wielu plików do jednej tabeli SQL przewodnik krok po kroku



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wyraźną listę słów używanych we wszystkich rekordach pola przy użyciu MS SQL?

  2. Wstaw SqlBulkCopy z kolumną tożsamości

  3. Jak utworzyć listę rozdzielaną przecinkami za pomocą zapytania SQL?

  4. Błąd SQL Server 4104:Nie można powiązać wieloczęściowego identyfikatora.

  5. Przeprowadź analizę produktu za pomocą wyszukiwania pełnotekstowego programu SQL Server. Część 1