Hoe maak je lus door Excel-bestanden en hen te laden in een database met behulp van SSIS pakket stack overflow

Ik moet een SSIS pakket te maken voor het importeren van gegevens uit meerdere Excel-bestanden in een SQL-database. Ik ben van plan over het gebruik van geneste Foreach Loop containers om dit te bereiken. Eén Foreach File Enumerator en genest binnen dat een Foreach ADO.net Schema Rowset Enumerator

Probleem om te overwegen: Sheet namen zijn verschillend tussen excel bestanden, maar de structuur blijft hetzelfde.

Ik heb een Excel Connection Manager gemaakt, maar het schema Rowset Teller aanvaardt de verbinding manager in de Enumerator configuratie.

Na onderzoek, vond ik dat je de Jet OLE DB-provider kunt gebruiken om verbinding te maken met een Excel-bestand. Maar ik kan alleen maar aangeven Microsoft Access-database-bestanden als gegevensbron. Een poging om een ​​Excel-bestand in te voegen als gegevensbron mislukt

Na meer onderzoek vond ik dat u de ODBC Data Provider kunt gebruiken met een verbinding string in plaats van een DSN. Na het plaatsen van een verbinding tekenreeks die het Excel-bestand ook deze mislukte

Ik heb niet verteld om een ​​Script Task gebruiken om dit te bereiken en zelfs na het proberen van een laatste wanhopige poging om te extraheren gegevens van sheets worden de toegang tot vellen per index Ik vond dat de index voor de vellen in de verschillende Excel-bestanden zijn verschillend

Alle hulp zou zeer gewaardeerd worden

Hier is één mogelijke manier om dit te doen op basis van de veronderstelling dat er zal niet een lege vellen in de Excel- ook alle bladen volgen exact dezelfde structuur. Ook, in de veronderstelling dat de bestandsextensie is slechts .xlsx

Blad 1 van States_1.xlsx bevatte de volgende data

Blad 2 van States_1.xlsx bevatte de volgende data

Blad 1 van States_2.xlsx bevatte de volgende data

Blad 2 van States_2.xlsx bevatte de volgende data

Maak een tabel in SQL Server genoemd dbo.Destination via het onderstaande script te maken. Excel sheet gegevens zullen worden opgenomen in deze tabel.

De tafel is momenteel leeg.

Maak een nieuwe SSIS-pakket en op de verpakking, maak de volgende 4 variabelen. FolderPath zal de map waar de Excel-bestanden zijn opgeslagen bevatten. FilePattern zal de uitbreiding van de bestanden die door middel zal worden doorgelust en dit voorbeeld werkt alleen voor .xlsx bevatten. Bestandspad zal worden toegewezen met een waarde die door de Foreach Loop container, maar we moeten een geldig pad om mee te beginnen voor het ontwerp tijd en het is momenteel gevuld met het pad F: \ Temp \ States_1.xlsx van de eerste Excel-bestand. SheetName de werkelijke naam van het blad bevatten, maar we moeten bevolken met een initiële waarde Sheet1 $ om ontwerptijd fouten te voorkomen.

In het pakket connection manager, maakt u een ADO.NET verband met de volgende configuratie en noem het als ExcelSchema .

Selecteer de provider Microsoft Office 12.0 Access Database Engine OLE DB Provider onder .Net Providers voor OleDb. Zorg voor het pad F: \ Temp \ States_1.xlsx

Maak een Excel-connection manager benoemd Excel, zoals hieronder weergegeven.

Maak een OLE DB-verbinding SQL Server genoemd SQLServer. Daarom moeten we drie aansluitingen op het pakket zoals hieronder getoond.

We moeten de volgende verbinding string veranderingen doen, zodat het Excel-bestand dynamisch wordt gewijzigd als de bestanden via een lus.

Op de verbinding ExcelSchema. configureren van de uitdrukking servernaam om de variabele FilePath gebruiken. Klik op de ellips knop om de expressie te configureren.

Evenzo de verbinding uitmunten. configureren van de uitdrukking servernaam om de variabele FilePath gebruiken. Klik op de ellips knop om de expressie te configureren.

Op de Control Flow, plaats twee Foreach Loop containers in elkaar. De eerste Foreach Loop container genaamd Loop bestanden zal lus door de files. De tweede Foreach Loop container zal de lakens in de container door. Binnen de binnenste Voor elke lus container, plaats een Data Flow taak die de Excel-bestanden en gegevens laden in SQL zal lezen

Configureren van de eerste Foreach lus container genoemd Loop bestanden zoals hieronder aangegeven:

Configureren van de eerste Foreach lus container genoemd Loop sheets zoals hieronder aangegeven:

Binnen de datastroom taak, het plaatsen van een Excel Source, Afgeleid Column en OLE DB bestemming zoals hieronder weergegeven:

Configureren van de Excel Source naar de juiste Excel-bestand en het blad dat op dit moment wordt doorgelust lezen.

Configureren van de afgeleide kolom nieuwe kolommen voor bestandsnaam en de naam van het blad te creëren. Dit is gewoon om dit voorbeeld te tonen, maar heeft geen betekenis.

Configureren van de OLE DB bestemming om de gegevens in te voegen in de SQL-tabel.

Screenshot hieronder toont een succesvolle uitvoering van het pakket.

Screenshot hieronder toont aan dat de gegevens van de 4 werkmappen in 2 Excel-spreadsheets die zijn het creëren van in het begin van dit antwoord correct in de SQL-tabel dbo.Destination wordt geladen.

Hoop dat het helpt.

Bron: stackoverflow.com

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *