sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kartlägger man in- och utdatakolumner dynamiskt i SSIS?

Om du skapar en liknande tabell kan du använda den i två metoder för att kartlägga kolumner dynamiskt i SSIS-paketet, eller så måste du bygga hela paketet programmatiskt. I det här svaret ska jag försöka ge dig några insikter om hur du gör det.

(1) Building Source SQL-kommando med alias

Obs! Det här tillvägagångssättet fungerar bara om alla .dbf-filer har samma kolumnantal men namnen är olika

I detta tillvägagångssätt kommer du att generera SQL-kommandot som kommer att användas som källa baserat på fil-ID och mappningstabellen du skapade. Du måste veta är fil-ID och .dbf-filsökväg lagrade i en variabel. som exempel:

Förutsatt att tabellnamnet är inputoutputMapping

Lägg till en Execute SQL Task med följande 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

Och på fliken Parametermappning väljer du variabeln som innehåller fil-ID:t som ska mappas till parametern 0 och variabeln som innehåller .dbf-filnamnet (alternativ till tabellnamn) till parametern 1

Ställ in ResultSet-typen på Single Row och lagra ResultSet 0 inuti en variabel av typen sträng som exempel @[User::SourceQuery]

ResultSet-värdet blir följande:

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

I OLEDB Source välj Table Access Mode till SQL Command från Variable och använd @[User::SourceQuery] variabel som källa.

(2) Använda en skriptkomponent som källa

I detta tillvägagångssätt måste du använda en skriptkomponent som källa i dataflödesuppgiften:

Först och främst måste du skicka .dbf-filsökvägen och SQL Server-anslutningen till skriptkomponenten via variabler om du inte vill hårdkoda dem.

Inuti skriptredigeraren måste du lägga till en utdatakolumn för varje kolumn som finns i destinationstabellen och mappa dem till destinationen .

Inuti skriptet måste du läsa in .dbf-filen till en datatabell:

  • C# Läs från .DBF-filer till en datatabell
  • Läs in en DBF i en datatabell

Efter att ha laddat in data i en datatabell, fyll även en annan datatabell med data som finns i MappingTable som du skapade i SQL Server.

Efter det går du över datatabellkolumnerna och ändrar .ColumnName till den relevanta utdatakolumnen, som exempel:

foreach (DataColumn col in myTable.Columns)
    {

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

    }

Efter att gå över varje rad i datatabellen och skapa en skriptutmatningsrad.

Observera dessutom att när du tilldelar utdatarader måste du kontrollera om kolumnen finns, du kan först lägga till alla kolumnnamn i listan med strängar och sedan använda den för att kontrollera, till exempel:

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

}

Om du behöver mer information om hur du använder en skriptkomponent som källa, kontrollera då en av följande länkar:

  • SSIS-skriptkomponent som källa
  • Skapa en källa med skriptkomponenten
  • Skriptkomponent som källa – SSIS
  • SSIS – ANVÄNDA EN SCRIPTKOMPONENT SOM KÄLLA

(3) Bygga paketet dynamiskt

Jag tror inte att det finns andra metoder som du kan använda för att uppnå detta mål förutom att du har valet att bygga paketet dynamiskt, då bör du gå med:

  • BIML
  • Integration Services hanterade objektmodell
  • EzApi-bibliotek

(4) SchemaMapper:C#-schemamappningsklassbibliotek

Nyligen startade jag ett nytt projekt på Git-Hub, som är ett klassbibliotek utvecklat med C#. Du kan använda den för att importera tabelldata från excel, word, powerpoint, text, csv, html, json och xml till SQL-servertabellen med en annan schemadefinition med hjälp av schemamappningsmetod. kolla in det på:

  • SchemaMapper:C# Schema mapping klassbibliotek

Du kan följa denna Wiki-sida för en steg-för-steg-guide:

  • Importera data från flera filer till en SQL-tabell steg för steg guide



  1. hur man konfigurerar hibernate-konfigurationsfilen för sql-servern

  2. 3 sätt att få språket för den aktuella sessionen i SQL Server (T-SQL)

  3. Nästan noll driftstopp automatiska uppgraderingar av PostgreSQL-kluster i moln (del II)

  4. Rekursiv subquerying med sortering