SSIS continua a cambiare forzatamente la stringa di origine di Excel in float


9

C'è una colonna in Excel che dovrebbe essere testo, ma SSIS vede lì un testo numerico e lo rende automaticamente mobile a doppia precisione [DT_R8].

Posso cambiarlo manualmente nelle colonne External ed Output del ramo Output, ma l'output di errore semplicemente rifiuta di farmi cambiare la rispettiva colonna.

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

Ho provato a modificare il pacchetto xml. Ho provato il IMEX=1e typeguessrow=0ma niente di tutto ciò ha risolto il mio problema. Questo ha qualche correzione? Ci sono anche articoli che suggeriscono di modificare il registro in modo che Excel legga più delle 8 righe predefinite prima di indovinare il tipo di dati. Non voglio seguire questa strada perché anche se dovesse funzionare, dovrei modificare il registro sulla macchina su cui intendo eseguire il pacchetto.

Ad esempio, il campo Excel da importare nel campo SQL nvarchar

295.3
296.33

ma vengono scritti nella tabella SQL come

295.30000000000001
296.32999999999998

Ho inserito i visualizzatori di dati e i campi mostrano

295.3
296.33

fino all'esecuzione che è corretta, ma immagino che quando colpisce l'origine destinazione OLE DB in qualche modo lo converte in

295.30000000000001
296.32999999999998

che è sbagliato.

Ho anche valori come V321.1 e V213.34 per esempio che non sono assolutamente numeri interi e devono essere memorizzati come varchar.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Paul White 9

Risposte:


2

È possibile ottenere il file come file .csv che può essere importato come un file di testo e non avrà questo problema? In genere eseguo il kickback di tutti i file di Excel e chiedo un altro formato perché SSIS ed Excel non funzionano bene insieme su molti livelli.


1
Sto saltando la modifica al file .csv o txt è nel prossimo futuro. renderà le cose molto più facili.
Juan Velez,

2

Sembra che non ci sia modo di risolvere questo problema. Excel esamina le prime righe di dati nella colonna e FORZERÀ sempre il tipo di dati su FLOAT, qualunque cosa accada. Mi è stata data una soluzione per creare un modello con alcuni caratteri varchar nelle prime poche righe (8+), quindi EXCEL lo prenderà come tipo di dati e quindi importerà i miei dati. La cosa che mi ha aiutato è che dal momento che sto usando Source Safe sono in grado di "archiviare" un file in modo che il file del mio pacchetto sia "Sola lettura" in modo che Visual Studio non possa modificare i miei tipi di dati predefiniti.


1

Passaggio 1: aggiungere IMEX=1; MAXROWSTOSCAN=0la stringa di connessioni (ad es Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0".).

Passaggio 2: chiudere la soluzione. Apri il pacchetto SSIS nell'editor di testo, trova le colonne che continuavano a tornare al tipo di dati predefinito. Aggiornalo manualmente nel file XML nel formato desiderato.

Passaggio 3: aprire il pacchetto in SQL Server Data Tool ed eseguire, ora si dovrebbe essere in grado di caricare i dati così come sono dal file.


Siamo spiacenti, ma il tipo di dati di origine non è nel pacchetto. Solo i tipi di colonna di destinazione. Ciò vanifica di nuovo lo scopo, poiché la conversione avviene ancora a fianco del driver Microsoft.Ace (o qualunque driver sia scelto) e la perdita di dati è già avvenuta quando entrano in SSIS e nella tabella di destinazione.
Ingegnere invertito
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.