2010-06-24 16 views
5

Sto utilizzando SSIS per eseguire la trasformazione dei dati da excel a SQL OLEDB. Ho un set di fogli in una cartella che dovrò passare attraverso e inserire i dati in ognuno di questi fogli su una tabella. Ho uno scenario in cui devo scorrere attraverso un insieme di fogli di Excel che ha diverse strutture di colonne. Posso scorrere su ogni foglio attraverso l'enumeratore del ciclo foreach trovare il nome file e passarli sul sorgente Excel.SSIS - mapping di colonne dinamiche

Voglio sapere se esiste un modo per evitare questo mapping di colonne nel componente di destinazione che sarà una tabella SQL OLEDB nel mio caso. Perché questi mapping sono diversi per ogni file. C'è un modo per farlo dinamicamente?

risposta

5

Mentre è possibile aggiungere un'attività di script all'interno del ciclo per modificare i mapping, non è la cosa più semplice da fare in quanto è necessario creare in modo esplicito ciascun mapping nel codice. Una soluzione più semplice sarebbe quella di sostituire i fogli excel con file di testo delimitati e importarli all'interno del loop utilizzando l'operazione di inserimento in blocco. Non dovrai fornire alcuna informazione di mappatura finché l'ordine delle colonne è uguale in entrambi i file e le tabelle.

Se non lo si può fare, è possibile memorizzare i metadati di mappatura da qualche parte, ad es. una tabella nel database e utilizzarla per creare i mapping dinamici in un'attività Script.

Un modo leggermente più semplice è utilizzare una sola attività di script che utilizza i metadati per configurare un oggetto SqlBulkCopy. Si perde la flessibilità di un compito di flusso di dati completo, ma se tutto ciò che si desidera è caricare alcuni file in talbes temporali, è sufficiente. Inoltre, è molto più semplice configurare un oggetto SqlBulkCopy rispetto all'attività Flusso di dati.

+0

Come si utilizza l'attività di script per configurare un oggetto SQLBulkcopy? c'è un link che posso usare? puoi essere un po 'più breve ... scusami per essere così stupido – Baaju

+3

Prova la documentazione della classe SqlBulkCopyColumnMapping su http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx per un esempio che utilizza mappature personalizzate. È semplice come fornire un lettore di origine (OleDbDataReader per Excel), una connessione di destinazione e il riempimento della proprietà ColumnMappings dell'oggetto SqlBulkCopy utilizzando i nomi delle colonne di origine e di destinazione. Puoi persino lasciare vuoto l'elenco ColumnMappings, nel qual caso esso mappa le colonne in base alla loro posizione ordinale, proprio come fa l'operazione di inserimento in blocco. –

Problemi correlati