sql >> Databáze >  >> RDS >> Sqlserver

Jak dynamicky mapovat vstupní a výstupní sloupce v SSIS?

Pokud vytvoříte podobnou tabulku, můžete ji použít ve 2 přístupech k dynamickému mapování sloupců uvnitř balíčku SSIS, nebo musíte celý balíček sestavit programově. V této odpovědi se vám pokusím poskytnout nějaké postřehy, jak to udělat.

(1) Vytvoření SQL příkazu zdroje s aliasy

Poznámka:Tento přístup bude fungovat pouze v případě, že všechny soubory .dbf mají stejný počet sloupců, ale názvy se liší

V tomto přístupu vygenerujete SQL příkaz, který bude použit jako zdroj na základě FileID a mapovací tabulky, kterou jste vytvořili. Musíte vědět, že je FileID a .dbf File Path uloženy uvnitř proměnné. jako příklad:

Za předpokladu, že název tabulky je inputoutputMapping

Přidejte úlohu Execute SQL pomocí následujícího příkazu:

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 kartě Parameter Mapping vyberte proměnnou obsahující FileID, která má být mapována na parametr 0 a proměnná, která obsahuje název souboru .dbf (alternativa k názvu tabulky) k parametru 1

Nastavte typ ResultSet na Single Row a uložte ResultSet 0 uvnitř proměnné typu string jako příklad @[User::SourceQuery]

Hodnota ResultSet bude následující:

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

V OLEDB Source vyberte režim přístupu k tabulce k příkazu SQL z proměnné a použijte @[User::SourceQuery] proměnná jako zdroj.

(2) Použití komponenty skriptu jako zdroje

V tomto přístupu musíte použít komponentu skriptu jako zdroj v rámci úlohy toku dat:

Nejprve musíte komponentě skriptu prostřednictvím proměnných předat cestu k souboru .dbf a připojení k SQL Serveru, pokud je nechcete pevně kódovat.

V editoru skriptů musíte přidat výstupní sloupec pro každý sloupec nalezený v cílové tabulce a namapovat je na cíl .

Uvnitř skriptu musíte načíst soubor .dbf do datové tabulky:

  • C# Číst ze souborů .DBF do datové tabulky
  • Načtěte DBF do DataTable

Po načtení dat do datové tabulky také vyplňte další datovou tabulku daty nalezenými v tabulce MappingTable, kterou jste vytvořili na serveru SQL Server.

Poté proveďte smyčku přes sloupce datatable a změňte .ColumnName do příslušného výstupního sloupce, jako příklad:

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 opakování každého řádku v datové tabulce a vytvoření řádku výstupu skriptu.

Kromě toho si uvědomte, že při přiřazování výstupních řádků musíte zkontrolovat, zda sloupec existuje, můžete nejprve přidat názvy všech sloupců do seznamu řetězce a poté jej použít ke kontrole, jako příklad:

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

}

Pokud potřebujete další podrobnosti o použití komponenty skriptu jako zdroje, podívejte se na jeden z následujících odkazů:

  • Komponenta skriptu SSIS jako zdroj
  • Vytvoření zdroje pomocí komponenty Script
  • Komponenta skriptu jako zdroj – SSIS
  • SSIS – POUŽÍVÁNÍ KOMPONENTY SKRIPTU JAKO ZDROJA

(3) Dynamické vytváření balíčku

Nemyslím si, že existují jiné metody, které můžete použít k dosažení tohoto cíle, kromě toho, že máte možnost sestavit balíček dynamicky, pak byste měli jít s:

  • BIML
  • Objektový model spravovaný Integračními službami
  • Knihovna EzApi

(4) SchemaMapper:Knihovna tříd mapování schémat C#

Nedávno jsem zahájil nový projekt na Git-Hubu, což je knihovna tříd vyvinutá pomocí C#. Můžete jej použít k importu tabulkových dat z excelu, wordu, powerpointu, textu, csv, html, json a xml do tabulky serveru SQL s jinou definicí schématu pomocí přístupu mapování schémat. podívejte se na:

  • SchemaMapper:Knihovna tříd mapování schémat C#

Můžete sledovat tuto stránku Wiki, kde najdete podrobného průvodce:

  • Importujte data z více souborů do jedné tabulky SQL krok za krokem



  1. Bourejte zdi! Jak uvolnit vaše data

  2. Webinář Plan Explorer 3.0 – ukázky a otázky a odpovědi

  3. Jak uniknout % z dotazu python mysql

  4. Nahrazení textu ve sloupci BLOB