query importar sql sql-server csv

query - importar csv sql server 2008



Errores en SQL Server al importar archivos CSV a pesar de que se usa varchar(MAX) para cada columna (6)

Creo que es un error, aplique la solución provisional y vuelva a intentarlo: http://support.microsoft.com/kb/281517 .

Además, vaya a la pestaña Avanzado y confirme si la longitud de las columnas objetivo es Varchar (max).

Estoy tratando de insertar un gran archivo CSV (varias gigs) en SQL Server, pero una vez que reviso el Asistente de importación y finalmente intento importar el archivo, aparece el siguiente informe de error:

  • Error al ejecutar (Error) Mensajes 0xc02020a1: Flujo de datos Tarea 1: Falló la conversión de datos. La conversión de datos para la columna "" Título "" devolvió el valor de estado 4 y el texto de estado "El texto se truncó o uno o más caracteres no coincidían en la página de códigos de destino.". (Asistente de importación y exportación de SQL Server)

  • Error 0xc020902a: Flujo de datos Tarea 1: El "Origen - Entorno_Salidas_de_vías [Salida de Archivo Plano]. Columnas [" Título "]" falló porque se produjo el truncamiento, y la disposición de la fila de truncamiento en "Origen - Entorno_Fuente_de_vinculación [Origen de Archivo Plano Salida]. Columnas ["Título"] "especifica la falla en el truncamiento. Se produjo un error de truncamiento en el objeto especificado del componente especificado. (Asistente de importación y exportación de SQL Server)

  • Error 0xc0202092: Flujo de datos Tarea 1: Se produjo un error al procesar el archivo "C: / Train.csv" en la fila de datos 2. (Asistente de importación y exportación de SQL Server)

  • Error 0xc0047038: Tarea de flujo de datos 1: Código de error de SSIS DTS_E_PRIMEOUTPUTFAILED. El método PrimeOutput en Source - Train_csv arrojó el código de error 0xC0202092. El componente devolvió un código de falla cuando el motor de la tubería llamó a PrimeOutput (). El significado del código de falla lo define el componente, pero el error es fatal y la tubería dejó de ejecutarse. Puede haber mensajes de error publicados antes de esto con más información sobre el error. (Asistente de importación y exportación de SQL Server)

Creé la tabla para insertar el archivo en primer lugar, y configuré cada columna para que contenga varchar (MAX), por lo que no entiendo cómo puedo seguir teniendo este problema de truncamiento. ¿Qué estoy haciendo mal?


El Editor avanzado no resolvió mi problema, en su lugar me obligaron a editar el archivo dtsx a través del bloc de notas (o su editor favorito de texto / xml) y reemplazar manualmente los valores en atributos para

length="0" dataType="nText" (estoy usando unicode)

Haga siempre una copia de seguridad del archivo dtsx antes de editar en modo texto / xml.

Ejecutando SQL Server 2008 R2


Es posible que esta respuesta no se aplique universalmente, pero corrigió la ocurrencia de este error que estaba encontrando al importar un pequeño archivo de texto. El proveedor de archivos planos estaba importando basado en columnas de texto fijas de 50 caracteres en el origen, lo cual era incorrecto. Ninguna cantidad de reasignación de las columnas de destino afectó el problema.

Para resolver el problema, en "Elegir un origen de datos" para el proveedor de archivos planos, después de seleccionar el archivo, aparece un botón "Sugerir tipos ..." debajo de la lista de columnas de entrada. Después de presionar este botón, incluso si no se realizaron cambios en el diálogo en uso, el proveedor de archivos planos volvió a consultar el archivo .csv de origen y luego determinó correctamente las longitudes de los campos en el archivo de origen.

Una vez hecho esto, la importación prosiguió sin más problemas.


Problema: el proveedor Jet OLE DB lee una clave de registro para determinar cuántas filas se deben leer para adivinar el tipo de columna de origen. De forma predeterminada, el valor de esta clave es 8. Por lo tanto, el proveedor escanea las primeras 8 filas de los datos de origen para determinar los tipos de datos para las columnas. Si cualquier campo se parece al texto y la longitud de los datos es de más de 255 caracteres, la columna se escribe como un campo memo. Por lo tanto, si no hay datos con una longitud superior a 255 caracteres en las primeras 8 filas de la fuente, Jet no puede determinar con precisión la naturaleza del tipo de datos. Como la primera longitud de 8 filas de datos en la hoja exportada es menor que 255, se considera la longitud de la fuente como VARCHAR (255) y no se pueden leer los datos de la columna que tienen más longitud.

Solución: la solución es solo ordenar la columna de comentarios en orden descendente. En 2012 en adelante, podemos actualizar los valores en la pestaña Avanzado en el Asistente de importación.


Vaya a la pestaña Avanzado ----> tipo de datos de la columna ---> Aquí cambie el tipo de datos de DT_STR a DT_TEXT y el ancho de columna 255. Ahora puede verificar que funcionará perfectamente.


En el Asistente de importación y exportación de SQL Server puede ajustar los tipos de datos de origen en la pestaña Advanced (estos se convierten en los tipos de datos del resultado si se crea una nueva tabla, pero de lo contrario solo se utilizan para manejar los datos de origen).

Los tipos de datos son molestamente diferentes a los de MS SQL, en lugar de VARCHAR(255) es DT_STR y el ancho de la columna de salida se puede establecer en 255 . Para VARCHAR(MAX) es DT_TEXT .

Por lo tanto, en la selección Fuente de datos, en la pestaña Advanced , cambie el tipo de datos de cualquier columna ofensiva de DT_STR a DT_TEXT (Puede seleccionar varias columnas y cambiarlas todas a la vez).