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