2011-12-25 61 views
49

Tengo un archivo de Excel con cuatro columnas de texto: , una de ellas se llama ShortDescription que tiene el valor más largo. Creé una tabla en la base de datos de SQL Server 2008, con cuatro columnas y el tipo de columna ShortDescription está establecido en NvarChar (Max).El texto se truncó o uno o más caracteres no coinciden en la página de códigos de destino Al importar desde el archivo de Excel

pero al usar el cuadro de diálogo de importación y exportación de SSIS, sigo obteniendo el error mencionado en el título, incluso cuando configuro la opción OnTruncation para Ignorar.

Intenté borrar los datos de la columna, y se realizó correctamente (así que me aseguré de que el problema esté en la columna ShortDescription). Intenté copiar todos los datos a otro libro de trabajo de Excel, y todavía no tuve suerte.

any ideas ???

Respuesta

60

Supongo que está tratando de importar esto utilizando una fuente de Excel en el cuadro de diálogo SSIS.

Si es así, es probable que el problema sea que SSIS muestrea algunas filas al principio de la hoja de cálculo cuando crea la fuente de Excel. Si en la columna [ShortDescription] no se ve nada demasiado grande, tendrá una columna de texto de 255 caracteres.

Así que para importar datos de una columna que contiene filas con grandes cantidades de datos sin truncamiento, hay dos opciones:

  1. Usted debe asegurarse de que el [shortDescription] columna en al menos uno de los muestreado filas contiene un valor de más de 255 caracteres. Una forma de hacerlo es usar la función REPT(), p. = REPT ('z', 4000), que creará una cadena de 4000 de la letra 'z'.
  2. Debe aumentar el número de filas muestreadas por el controlador de Jet Excel para incluir dicha fila. Puede aumentar el número de filas muestreadas al aumentar el valor de TypeGuessRows en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel (de si su sistema es x64 y luego en HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excel) clave de registro.

Se puede ver más información en estos dos enlaces:

Para explicar con más detalle, SSIS crea 3 objetos detrás de las escenas de la asistente, un Excel objeto de fuente de datos, un objeto de destino de tabla SQL y un operador de flujo de datos entre ellos. El objeto de origen de Excel define los datos de origen y existe independientemente de los otros dos objetos. Entonces cuando se crea, el muestreo que describí se hace y se establece el tamaño de la columna fuente. Entonces, cuando el operador de flujo de datos se ejecuta e intenta extraer los datos de Excel para ponerlos en su tabla, ya está viendo una fuente de datos que se ha limitado a 255 caracteres.

+3

eso es increíblemente correcto !!! pero ¿por qué sucede eso si la columna de destino está configurada para aceptar la longitud máxima de datos? Entonces, ¿qué tiene que ver la longitud de la columna fuente con eso? –

+7

"Nota Para los sistemas de 64 bits, la clave correspondiente es la siguiente: ' HKLM \ SOFTWARE \ wow6432node \ microsoft \ jet \ 4.0 \ engines \ excel' "- [link] (http://support.microsoft.com/ kb/281517) ¿Pero aparentemente el valor solo puede ser de hasta 16? No parece ser una gran mejora, pero no lo he probado. – PeterX

28

Tuve este problema al importar desde un archivo plano y delimitado a SQL Server. La solución fue actualizar el valor 'OutputColumnWidth' para la columna ofensiva (del mensaje de error). En el formulario 'Elegir un origen de datos' en el asistente de importación, mi fuente era el archivo plano. En el panel de la izquierda, elige 'Avanzado'. A continuación, puede establecer las propiedades de columnas individuales. En mi caso, el 'OutputColumnWidth' para la mayoría de mis columnas fue predeterminado a '50'. Simplemente lo actualicé a un valor mayor que no truncaría el valor del archivo plano.

enter image description here

+3

Alternativamente, en lugar de adivinar un límite lo suficientemente grande para un DT_STR, puede elegir el tipo de DTNTEXT SSIS, que es el equivalente del nvarchar de MSSQL (max) o los tipos de ntext obsoletos. – eidgenossen

+0

Una combinación de actualizar OutputColumnWidth y usar DataType DT_WSTR funcionó para mí. En SQL Server 2014, DT_WSTR puede tener un OutputColumnWidth de hasta 4.000 caracteres Unicode de ancho. Esto dio como resultado algo similar a la respuesta de 40-Love a continuación. – Jasper

+0

¿Puedes cambiar todas estas columnas a la vez? Tengo una gran cantidad de columnas y me preguntaba si esto fue posible. – Lostaunaum

5

que tiene este error cuando yo estaba tratando de importar un archivo de gran tamaño que tenía algunos caracteres chinos en él, y también algunos (grandes) cadenas no válidas.

El archivo de texto se guardó en formato UTF8.

Mi configuración:

en la opción general (no cambiaron nada):

- Locale: English (United States) 
- Unicode: Unchecked 
- Code Page: 65001 (UTF-8) 

hay una opción avanzada de la izquierda

- DataType (for column): Unicode String [DT_WSTR] (changed) 
- OutputColumnWidth: 4000 (that's the maximum) (changed) 

En la revisión de tipo de datos Asignación

- On Error: Ignore 
- On Truncation: Ignore 

Mi columna de destino tenía ancho = 50.

No recibí ningún error con esta configuración.

+0

Gracias por publicar esto. Recibí el mismo mensaje de error durante mis importaciones, causado por el problema mencionado anteriormente: intento de importar datos con caracteres foráneos en campos con tipos de datos que no aceptaban caracteres foráneos. Mi solución, a corto plazo, fue eliminar los caracteres extraños de los datos que estaba tratando de importar. – cjo30080

7

Una forma sencilla de hacerlo funcionar es editando el archivo que desea importar y creando una nueva fila en el primer punto. De esa forma siempre será muestreado. Luego, para cualquier columna que tenga> 255 caracteres, simplemente agregue 255 caracteres a la celda y funcionará. Después de importar, simplemente elimine la fila de basura que agregó.

+2

Este fue el camino más corto hacia el éxito para mí. –

+0

Hmmm, no estoy seguro de cómo esto es diferente de la solución. Esta solución parece más apropiada para stackexchange. ~ (: – dcary

1

Hay una ubicación alternativa del componente de registro que debe modificarse para resolver este problema.

Si no lo puede encontrar en

Inicio-> RUN> regedit-> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

luego mira en

Inicio-> RUN> regedit-> HKEY_LOCAL_MACHINE -> SOFTWARE -> Wow6432Node -> Microsoft -> -> Jet 4.0 -> motores -> Excel

1

Para mí este enlace me ayudó: https://support.microsoft.com/en-us/kb/189897

  1. Copiar la fila que tiene valor de celda> 255 caracteres al principio de la excel, hacen que la fila de la primera fila en el Excel
  2. cambio el valor del registro del enlace de arriba
Cuestiones relacionadas