sql server 2005 - services - Error de paquete de importación: no se puede convertir entre tipos de datos de cadenas Unicode y Unicode
no se puede convertir unicode y no unicode (16)
He hecho un paquete dtsx en mi computadora usando SQL Server 2008. Importa datos de un archivo csv delimitado por punto y coma en una tabla donde todos los tipos de campo son NVARCHAR MAX.
Funciona en mi computadora, pero necesita ejecutarse en el servidor de los clientes. Cada vez que crean el mismo paquete con el mismo archivo csv y la misma tabla de destino, reciben el error anterior.
Hemos pasado por la creación del paquete paso a paso, y todo parece estar bien. Las asignaciones son todas correctas, pero cuando ejecutan el paquete en el último paso, reciben este error. Están usando SQL Server 2005.
¿Alguien puede aconsejar dónde comenzar a buscar este problema?
Acceda al registro para configurar el cliente y cambie el LANG. Para Oracle, vaya a HLM / SOFTWARE / ORACLE / KEY_ORACLIENT ... HOME / NLS_LANG y cambie al idioma apropiado.
Cambié ValidateExternalMetadata = False para cada tarea de transformación. Funcionó para mí
El problema de la conversión desde cualquier fuente que no sea Unicode a una tabla Unicode SQL Server se puede resolver de la siguiente manera:
- agregue un paso de transformación de conversión de datos a su flujo de datos
- abra la conversión de datos y seleccione Unicode para cada tipo de datos que aplique
- tome nota del Alias de salida de cada columna aplicable (se denominan Copia de [nombre de columna original] de manera predeterminada)
- ahora, en el paso Destino, haga clic en Asignaciones
- cambie todas las asignaciones de entrada para que provengan de las columnas con alias en el paso anterior (este es el paso que se pasa por alto fácilmente y lo dejará preguntándose por qué sigue recibiendo los mismos errores)
En algún momento obtenemos este error cuando seleccionamos el carácter estático como un campo en consulta / vista / procedimiento fuente y el tipo de datos del campo de destino en Unicode.
A continuación se muestra el problema que enfrenté: utilicé el script a continuación en la fuente
y obtuve el mensaje de error Column "CATEGORY" cannot convert between Unicode and non-Unicode string data types.
como abajo: mensaje de error
Resolución: Intenté varias opciones pero ninguna me funcionó. Luego prefija el valor estático con N para hacer en Unicode como se muestra a continuación:
SELECT N''STUDENT DETAIL'' CATEGORY, NAME, DATEOFBIRTH FROM STUDENTS
UNION
SELECT N''FACULTY DETAIL'' CATEGORY, NAME, DATEOFBIRTH FROM FACULTY
Esta es una solución que usa el IDE para corregir:
- Agregue un elemento de
Data Conversion
a su flujo de datos como se muestra a continuación;
- Haga doble clic en el elemento de
Data Conversion
y configúrelo como se muestra a continuación:
- Ahora haga doble clic en el elemento
DB Destination
, haga clic enMapping
y asegúrese de que su columna de entrada sea realmente la misma que proviene de la Copia de [su nombre de columna], que de hecho es la salida deData Conversion
NO la salida deDB Source
( cuidado aquí). Aquí hay una captura de pantalla:
Y eso es ... guardar y correr ...
La tarea de conversión de datos dts lleva tiempo si hay más de 50 columnas. Encontré una solución para esto en el siguiente enlace
http://rdc.codeplex.com/releases/view/48420
Sin embargo, no parece funcionar para versiones anteriores a 2008. Así que así es como tuve que solucionar el problema
*Open the .DTSX file on Notepad++. Choose language as XML
*Goto the <DTS:FlatFileColumns> tag. Select all items within this tag
*Find the string **DTS:DataType="129"** replace with **DTS:DataType="130"**
*Save the .DTSX file.
*Open the project again on Visual Studio BIDS
*Double Click on the Source Task . You would get the message
the metadata of the following output columns does not match the metadata of the external columns with which the output columns are associated:
...
Do you want to replace the metadata of the output columns with the metadata of the external columns?
*Now Click Yes. We are done !
Mike, tuve el mismo problema con SSIS en SQL Server 2005 ... Aparentemente, el objeto DataFlowDestination siempre intentará validar los datos entrantes, en Unicode. Vaya a ese objeto, Editor avanzado, panel Propiedades del componente, cambie la propiedad "ValidateExternalMetaData" a False. Ahora, vaya al panel Propiedades de entrada y salida, Entrada de destino, Columnas externas: configure cada columna Tipo de datos y Longitud para que coincida con la tabla de la base de datos a la que va. Ahora, cuando cierre ese editor, los cambios de columna se guardarán y no se validarán, y funcionará.
No estoy seguro de si esta es una buena práctica con SSIS, pero a veces sus herramientas son un poco torpes cuando desea realizar este tipo de actividad.
En lugar de usar sus componentes, puede convertir los datos dentro de su consulta
En lugar de hacer
SELECT myField = myNvarchar20Field
FROM myTable
Podrías hacerlo
SELECT myField = CONVERT(VARCHAR(20),myNvarchar20Field)
FROM myTable
No estoy seguro si esto todavía es un problema pero encontré esta solución simple:
- Haga clic con el botón secundario Ole DB Source
- Seleccione ''Editar''
- Seleccione la pestaña Propiedades de entrada y salida
- En "Entradas y salidas", expanda columnas externas y columnas de salida "Ole DB Source Output".
- En las columnas de Salida, seleccione el campo ofensivo, en el panel derecho, asegúrese de que la Propiedad del tipo de datos coincida con la del campo en las propiedades de Columnas externas.
Espero que esto sea claro y fácil de seguir
Resuelto - al original pregunte:
He visto esto antes La manera más fácil de corregir (no es necesario que todos esos pasos de conversión de datos, ya que TODOS los metadatos están disponibles desde la conexión de origen):
Elimine OLE DB Source & OLE DB Destinations Asegúrese de que la validación retrasada sea FALSE (puede establecerla en True más adelante) Recrear el origen OLE DB con su consulta, etc. Compruebe en el Editor avanzado que todos los tipos de columna de datos de salida son correctos Vuelva a crear su OLE DB Destination, map, create new table (o reasignar a existing) y verá que SSIS tiene todos los tipos de datos correctos (igual que source).
Mucho más fácil que las cosas de arriba.
Si alguien todavía está experimentando este problema, descubrí que se relacionaba con una diferencia en las versiones de Oracle Client.
He publicado mi experiencia y solución completa aquí: https://.com/a/43806765/923177
Siga los pasos a continuación para evitar (no se puede convertir entre tipos de datos de cadena unicode y no unicode) este error
i) Agregue la herramienta de Transformación de conversión de datos a su DataFlow.
ii) Para abrir DataFlow Conversion y seleccionar [string DT_STR] datatype.
iii) Luego vaya a Flujo de destino, seleccione Asignación.
iv) cambie su nombre de i / p para copiar el nombre.
dos soluciones: 1- si el tipo de la columna de destino es [nvarchar], se debe cambiar a [varchar]
2- Agregue un componente "Columna Drived" al paquete SSIS y agregue una nueva columna con la siguiente expresión:
(DT_WSTR, «longitud») [Nombre de columna]
longitud es la longitud de la columna en la tabla de destino y ColumnName es el nombre de la columna en la tabla de destino. finalmente, en la parte del mapeo, debe usar esta nueva columna agregada en lugar de la columna original.
Tipos de datos de cadena no Unicode:
Utilice STR para archivo de texto y VARCHAR para columnas de SQL Server.
Tipos de datos de cadena Unicode:
Use W_STR para archivos de texto y NVARCHAR para columnas de SQL Server.
El problema es que sus tipos de datos no coinciden, por lo que podría haber una pérdida de datos durante la conversión.
En algún momento, intenta convertir una columna nvarchar
en una columna varchar
(o viceversa).
Además, ¿por qué todo es (supuestamente) nvarchar(max)
? Ese es un olor a código si alguna vez lo veo. ¿Conoce cómo SQL Server almacena esas columnas? Utilizan punteros a donde se almacena la columna de las filas reales, ya que no caben dentro de las páginas 8k.
1.add a Data Conversion tool from toolbox
2.Open it,It shows all coloumns from excel ,convert it to desire output. take note of the Output Alias of
each applicable column (they are named Copy Of [original column name] by default)
3.now, in the Destination step, click on Mappings