Domanda Importazione di SSIS Excel forzando il tipo di colonna errato


Sto cercando di importare un foglio di calcolo nel nostro database utilizzando SSIS. Per qualche motivo SSIS vuole credere che due delle colonne siano di tipo Double, quando contengono dati di carattere. Ho provato a rimappare le colonne per essere nvarchar (255), ma non vuole ancora selezionare i dati che pensa sia doppio, perché ci sono caratteri in esso. Se provo a modificare il pacchetto SSIS e cambia i tipi di colonna in Excel Source, non mi consentirà di modificare il tipo di colonne nell'output degli errori e mi darà un errore se le colonne di output regolare e di output degli errori non incontro.

Perché SSIS insiste sul fatto che queste colonne sono doppie? Come posso costringerlo a realizzare queste stringhe? Perché tutto da Microsoft non funziona abbastanza correttamente?

EDIT: ho trovato questo: http://support.microsoft.com/kb/236605

Ho ordinato i miei dati in modo che i tipi di dati misti fossero al top e indovina cosa: Il problema invertito. Invece di non importare i dati dei caratteri, ha smesso di importare dati puramente numerici. Apparentemente qualcuno non pensa che 12345 possa essere rappresentato come una stringa ...


44
2018-02-12 17:44


origine


risposte:


Ho visto questo problema prima, è Excel che non è il problema di SSIS. Excel campiona le prime poche righe e quindi deduce il tipo di dati anche se lo si imposta in modo esplicito al testo. Quello che devi fare è metterlo nella stringa di connessione del file Excel nel pacchetto SSIS. Questa istruzione indica a Excel che le colonne contengono tipi di dati misti e suggerisce di effettuare un controllo supplementare prima di decidere che la colonna sia di tipo numerico, mentre in realtà non lo è.

;Extended Properties="IMEX=1"

Dovrebbe funzionare con questo (nella maggior parte dei casi). La cosa più sicura da fare è esportare i dati di Excel nel testo delimitato da tabulazioni e utilizzare SSIS per importarlo.


40
2018-02-12 18:03



Puoi convertire (cioè forzare) i dati della colonna in testo ... Prova questo (nota: queste istruzioni sono basate su Excel 2007) ...

I seguenti passaggi dovrebbero forzare Excel a trattare la colonna come testo:

Apri il foglio di calcolo con Excel.

Seleziona l'intera colonna che contiene i "dati per lo più numerici" facendo clic sull'intestazione della colonna.

Fare clic sulla scheda Dati nel menu della barra multifunzione.

Seleziona il testo in colonne. Verrà visualizzata la procedura guidata Converti testo in colonne.

-Al passo 1: fare clic su Avanti

-Al passo 2: fare clic su Avanti

-Al passo 3: seleziona testo e fai clic su Fine

Salva il tuo foglio Excel.

Riprovare l'importazione utilizzando la procedura guidata Importa dati di SQL Server 2005.

Inoltre, ecco un link ad un'altra domanda che ha risposte aggiuntive:

Importazione guidata dati non mi piace Tipo di dati che scelgo per una colonna


28
2018-04-23 01:52



Una cosa che non è menzionata nella risposta accettata è che il parametro "IMEX = 1" deve andare dentro la parte citata di:

...;Extended Properties="...";

13
2017-08-04 16:41



; IMEX = 1; non funziona sempre ... Tutto sui tipi di dati misti in Excel: Tipi di dati misti nella colonna di Excel

enter image description here


7
2017-08-03 13:32



Un'altra soluzione consiste nell'ordinare il foglio di calcolo con i dati dei caratteri nella parte superiore, facendo in modo che Excel veda la colonna come stringa e importi tutto come tale.


5
2018-06-16 18:01



È inoltre possibile modificare il Registro di sistema per visualizzare più valori rispetto alle sole prime 8 righe. Ho usato questo metodo e funziona abbastanza bene.

http://support.microsoft.com/kb/281517


3
2017-07-06 23:49



Bene IMEX = 1 non ha funzionato per me. Nemmeno il suggerimento di Reynier Booysen. (Non so se faccia la differenza, ma sto usando SQL Server 2008r2). Una buona spiegazione di alcuni workaround e anche alcune spiegazioni sul perché IMEX = 1 è limitata alle prime otto righe di ogni foglio di calcolo può essere trovata a http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/78b87712-8ffe-4c72-914b-f1c031ba6c75

Spero che questo ti aiuti


1
2018-04-05 21:40



Ho usato la seguente ricetta:

  1. Importa dati da Excel ad Access
  2. Importa i dati da Access a SQL Server

e ha funzionato per me ...


1
2018-06-16 10:13



Stavo sbattendo la testa contro un muro con questo problema per un po '. Nel nostro ambiente, utilizziamo i file dei prezzi dei nostri fornitori in vari formati, alcuni dei quali hanno più di un milione di record. Questo problema si verifica in genere dove:

  • Le righe scansionate dal driver OLEDB sembrano contenere numeri, ma contengono valori misti più avanti nel set di record, o
  • I campi contengono solo numeri, ma la fonte ha alcuni formattati come testo (in genere file Excel).

Il problema è che anche se si imposta la colonna di input esterno sul tipo di dati desiderato, il file viene scansionato ogni volta che si esegue il pacchetto e viene modificato dinamicamente in qualsiasi cosa il driver OLEDB ritenga debba essere il campo.

I nostri file di origine in genere contengono intestazioni di campo (testo) e prezzi (campi numerici), che mi dà una soluzione semplice:

Primo passo:

  • Modifica la tua istruzione SQL per includere i campi dell'intestazione. Questa forza SSIS per vedere tutti i campi come testo, compresi i campi del prezzo.

Per i campi misti:

  • Il tuo problema iniziale è risolto perché i tuoi campi sono ora di testo, ma hai ancora una riga di intestazione nel tuo output.
  • Impedisci alla riga di intestazione di trasformarla nel tuo output modificando la clausola SQL WHERE per escludere i valori dell'intestazione, ad es. "WHERE NOT ([F4] = 'Prezzo')"

Per i campi numerici:

  • Utilizzando l'editor avanzato per l'origine OLE DB, impostare l'output colonna per il campo del prezzo (o qualsiasi altro campo numerico) a un valore numerico Tipo di dati. Ciò causa qualsiasi record che contiene il testo in questi campi fallire, incluso il record di intestazione, ma impone una conversione valori numerici salvati come testo.

  • Imposta Output errore per ignorare i guasti nei tuoi campi numerici.

  • In alternativa, se hai ancora bisogno di errori sui campi numerici reindirizzati, rimuovi la riga di intestazione modificando la clausola WHERE SQL per escludere i valori dell'intestazione, quindi,

  • Impostare Output errore per reindirizzare i guasti su questo campo.

Ovviamente questo metodo funziona solo dove hai i campi header, ma spero che questo aiuti alcuni di voi.


1
2018-05-14 00:44



Opzione 1. Utilizzare Visual Basic per scorrere ogni colonna e formattare ciascuna colonna come Testo.

Utilizza il menu Da testo a colonne, non modificare la delimitazione e cambia "Generale" in "Testo"


0
2018-02-18 18:32