sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kortlægges input- og outputkolonner dynamisk i SSIS?

Hvis du opretter en lignende tabel, kan du bruge den i 2 tilgange til at kortlægge kolonner dynamisk inde i SSIS-pakken, eller du skal bygge hele pakken programmatisk. I dette svar vil jeg forsøge at give dig nogle indsigter i, hvordan du gør det.

(1) Building Source SQL-kommando med aliaser

Bemærk:Denne tilgang virker kun, hvis alle .dbf-filer har samme kolonneantal, men navnene er forskellige

I denne tilgang vil du generere SQL-kommandoen, der vil blive brugt som kilde baseret på det fil-id og den kortlægningstabell, du har oprettet. Du skal vide, er fil-id'et og .dbf-filstien gemt i en variabel. som eksempel:

Forudsat at tabelnavnet er inputoutputMapping

Tilføj en Execute SQL Task med følgende kommando:

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

Og på fanen Parameter Mapping skal du vælge den variabel, der indeholder fil-id'et, der skal tilknyttes parameteren 0 og den variabel, der indeholder .dbf-filnavnet (alternativ til tabelnavn) til parameteren 1

Indstil ResultSet-typen til Single Row og gem resultatsættet 0 inde i en variabel af typen streng som eksempel @[User::SourceQuery]

ResultSet-værdien vil være som følger:

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

I OLEDB Source vælg Table Access Mode til SQL Command fra Variable og brug @[User::SourceQuery] variabel som kilde.

(2) Brug af en scriptkomponent som kilde

I denne tilgang skal du bruge en scriptkomponent som kilde i Dataflow-opgaven:

Først og fremmest skal du videregive .dbf-filstien og SQL Server-forbindelsen til script-komponenten via variabler, hvis du ikke vil hardkode dem.

Inde i script-editoren skal du tilføje en outputkolonne for hver kolonne fundet i destinationstabellen og kortlægge dem til destinationen .

Inde i scriptet skal du læse .dbf-filen ind i en datatabel:

  • C# Læs fra .DBF-filer til en datatabel
  • Indlæs en DBF i en datatabel

Når du har indlæst dataene i en datatabel, skal du også udfylde en anden datatabel med de data, der findes i den MappingTable, du oprettede i SQL Server.

Løft derefter datatabelkolonnerne og skift .ColumnName til den relevante outputkolonne, som eksempel:

foreach (DataColumn col in myTable.Columns)
    {

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

    }

Løft derefter over hver række i datatabellen og opret en script-outputrække.

Bemærk desuden, at mens du tildeler outputrækker, skal du kontrollere, om kolonnen eksisterer, du kan først tilføje alle kolonnenavne til listen over strenge og derefter bruge den til at kontrollere, f.eks.:

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

}

Hvis du har brug for flere detaljer om brug af en scriptkomponent som kilde, så tjek et af følgende links:

  • SSIS-scriptkomponent som kilde
  • Oprettelse af en kilde med scriptkomponenten
  • Scriptkomponent som kilde – SSIS
  • SSIS – BRUG AF EN SCRIPTKOMPONENT SOM KILDE

(3) Opbygning af pakken dynamisk

Jeg tror ikke, der er andre metoder, du kan bruge til at nå dette mål, bortset fra at du har valget om at bygge pakken dynamisk, så bør du gå med:

  • BIML
  • Integration Services-styret objektmodel
  • EzApi-bibliotek

(4) SchemaMapper:C#-skemakortlægningsklassebibliotek

For nylig startede jeg et nyt projekt på Git-Hub, som er et klassebibliotek udviklet ved hjælp af C#. Du kan bruge den til at importere tabeldata fra excel, word, powerpoint, tekst, csv, html, json og xml til SQL-servertabel med en anden skemadefinition ved hjælp af skemamapping-tilgang. tjek det ud på:

  • SchemaMapper:C# Schema mapping klassebibliotek

Du kan følge denne Wiki-side for en trin-for-trin guide:

  • Importer data fra flere filer til én SQL-tabel trin for trin vejledning



  1. Skift standard dato-tidsformat på en enkelt database i SQL Server

  2. Annoncering af ClusterControl 1.7.5:Avanceret klyngevedligeholdelse og support til PostgreSQL 12 og MongoDB 4.2

  3. Top ti MySQL GUI-værktøjer

  4. Forretningslogik:Database eller applikationslag