SSIS mantiene la fuerza cambiando la cadena fuente de Excel para flotar


9

Hay una columna en Excel que se supone que es texto, pero SSIS ve texto numérico allí y automáticamente lo hace flotante de doble precisión [DT_R8].

Puedo cambiarlo manualmente en las columnas Externa y Salida de la rama Salida, pero la Salida de error simplemente se niega a permitirme cambiar la columna respectiva.

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)".

He intentado modificar el paquete xml. Probé el IMEX=1y typeguessrow=0pero nada de eso ha solucionado mi problema. ¿Tiene esto alguna solución? También hay artículos que sugieren que modifique su registro para que Excel lea más que las 8 filas predeterminadas antes de adivinar el tipo de datos. No quiero seguir esta ruta porque incluso si fuera a funcionar, entonces tendría que modificar el registro en la máquina en la que planeo ejecutar el paquete.

El campo de Excel que se importará en el campo SQL nvarchar lee, por ejemplo

295.3
296.33

pero se están escribiendo en la tabla SQL como

295.30000000000001
296.32999999999998

Puse visores de datos y los campos muestran

295.3
296.33

todo el camino a través de la ejecución, que es correcta, pero supongo que cuando llega a la fuente de destino OLE DB, de alguna manera la convierte en

295.30000000000001
296.32999999999998

Cuál está mal.

También tengo valores como V321.1 y V213.34, por ejemplo, que definitivamente no son enteros y deben almacenarse como varchar.


Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Paul White 9

Respuestas:


2

¿Es posible obtener el archivo como un archivo .csv que se puede importar como un archivo de texto y no tendrá este problema? Por lo general, retrocedo todos los archivos de Excel y solicito otro formato porque SSIS y Excel no funcionan bien juntos en muchos niveles.


1
Estoy saltando el cambio al archivo .csv o txt en un futuro próximo. hará las cosas mucho más fáciles.
Juan Velez

2

Parece que no hay forma de solucionar este problema. Excel mira las primeras filas de datos en la columna y siempre FORZARÁ el tipo de datos a FLOTAR sin importar qué. Me dieron una solución de crear una plantilla con unos pocos caracteres varchar en las primeras filas (8+) para que EXCEL lo tome como tipo de datos y luego importe mis datos. Lo que ayudó fue que, como estoy usando Source Safe, puedo "registrar" un archivo para que haga que mi archivo de paquete sea de "solo lectura", de modo que Visual Studio no pueda cambiar mis tipos de datos predefinidos.


1

Paso 1: Agregue IMEX=1; MAXROWSTOSCAN=0la cadena de conexiones (por ejemplo Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0").

Paso 2: cierra la solución. Abra el paquete SSIS en el editor de texto, busque las columnas que se invierten nuevamente al tipo de datos predefinido. Actualícelo manualmente en el archivo XML al formato deseado.

Paso 3: abra el paquete en la Herramienta de datos de SQL Server y ejecútelo, ahora debería poder cargar los datos tal como provienen del archivo.


Lo sentimos, pero el tipo de datos de origen no está en el paquete. Solo los tipos de columna de destino. Esto anula el propósito nuevamente, ya que la conversión todavía ocurre en el lado del controlador Microsoft.Ace (o el controlador que se elija), y la pérdida de datos ya ha ocurrido cuando llega al SSIS y la tabla de destino.
Ingeniero invertido
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.