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=1
y typeguessrow=0
pero 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.
fuente
Respuestas:
¿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.
fuente
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.
fuente
Paso 1: Agregue
IMEX=1; MAXROWSTOSCAN=0
la cadena de conexiones (por ejemploProvider=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.
fuente