Importa da Excel a Sql Server

asp.net bulkinsert sqlbulkcopy sql-server ssis

Domanda

Ho un compito per importare i dati excel sul server Sql. I dati excel provengono da modelli Excel. Esistono diversi modelli di Excel disponibili per diversi cleint, quindi le colonne in Excel non sono identiche a tutti i modelli. I dati devono essere importati in una tabella comune di SQl.

Ho fatto ricerche su google e ci sono molti esempi disponibili in rete, ma non riesco a identificare quale sia il metodo migliore.

Posso chiederti di indicarmi come ottenere le colonne dinamiche dei modelli sopra descritte.

Nel modello excel la riga iniziale e la riga finale non sono corrette.

Risposta accettata

SSIS

Un'attività Data Flow Task , l'attività principale per lo spostamento dei dati all'interno di un pacchetto SSIS, è strettamente legata ai metadati del provider di origine. Se una fonte ha string, int, string e la successiva ha string, string, string, string, i metadati saranno troppo diversi per quel lavoro nello stesso flusso di dati. Mentre è possibile forzare i dati interi in una stringa, la differenza nel conteggio delle colonne non può essere superata.

Nel tuo caso, a meno che tu non abbia una logica aziendale terribilmente complessa da applicare ai dati provenienti da questi fogli di calcolo nella tabella consolidata, probabilmente cercherò di progettare pacchetti N + 1. Un pacchetto per ogni possibile formato Excel che riceverete. Presumo che esista una logica per determinare da quale modello è stato originato un file (ClientAV1.xlsx, ClientBV2.xlsx, ecc.). Questi pacchetti avrebbero un flusso di dati che era origine di Excel in destinazione OLE DB. Il pacchetto finale sarebbe un pacchetto genitore / controllore / master. Gestirebbe il coordinamento di questi altri pacchetti in base ai file disponibili.

C #

Dato che hai codificato asp.net, suppongo che tu stia bene anche con un approccio .NET. In questa risposta , descrivo come è possibile leggere i file di Excel in .NET e mentre lo inserisco in un flusso di dati SSIS, non c'è nulla che impedisca l'emissione di comandi di massa per caricare i dati in SQL Server.


Risposta popolare

La mappatura dinamica delle colonne in SSIS è piuttosto complicata, il metodo più semplice in cui non devi preoccuparti del mapping delle colonne è quello di utilizzare l'opzione Openrowset per importare i dati dal file Excel al file sql. È possibile utilizzarlo come comando e aggiungerlo in Esegui attività SQL:

 SELECT * INTO <TableName> FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\Filename.xls', 'SELECT * FROM [Sheet$]')


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow