tipos - Conversión de SSIS entre Unicode y un error no Unicode
no se puede convertir unicode y no unicode (8)
Tengo un paquete de ssis donde estoy usando una fuente OLEDB que enlaza a la tabla de SQL Server 2005. Todas las columnas, excepto una columna de fecha, son NVARCHAR (255). Estoy usando un destino de Excel y usando una declaración de SQL para crear la hoja en el libro de Excel, el SQL está en el administrador de conexión de Excel (efectivamente una declaración de tabla de creación que crea una hoja) y se deriva de la asignación de las columnas del DB.
No importa lo que haya hecho, sigo obteniendo este error de conversión unicode -> no unicode entre mi origen y destino. Intentó la conversión a la cadena [DT_STR] entre S> D, la eliminó, cambió la Tabla SQL VARCHAR a NVARCHAR y aún obtiene este error de flippin.
Debido a que estoy creando la hoja en Excel con una declaración de SQL, no veo ninguna forma de predefinir realmente cuáles serán los tipos de datos de las columnas en la hoja de Excel. Me imagino que sería un metadato predeterminado, pero no sé.
Entonces, entre el destino de mi tabla SQL y la creación de mi hoja de Excel con esta declaración sql de SSIS, ¿cómo puedo evitar que aparezca este error?
Mi error es:
Error en la tarea de flujo de datos [OLE DB Source [1]]: la columna "MyColumn" no puede convertir entre tipos de datos de cadena unicode y no unicode.
Y para todas las columnas nvarchar.
Apreciar cualquier ayuda
Gracias
Andrés
Primero, agregue un bloque de conversión de datos en su diagrama de flujo de datos.
Abra el bloque de conversión de datos y marque la columna para la cual se muestra el error. A continuación, cambie su tipo de datos a la cadena Unicode (DT_WSTR) o cualquier tipo de datos que se espere y guarde.
Ir al bloque de destino. Vaya a mapear en él y mapee el elemento recién creado a su dirección correspondiente y guárdelo.
Haga clic con el botón derecho en su proyecto en la solución explorer.select properties. Seleccione las propiedades de configuración y seleccione la depuración en él. En esto, establezca la opción Run64BitRunTime en falso (ya que excel no maneja muy bien la aplicación de 64 bits).
Añada transformaciones de conversión de datos para convertir columnas de cadena de cadenas que no sean Unicode (DT_STR) a Unicode (DT_WSTR).
Debe hacer esto para todas las columnas de cadena ...
En el ejemplo anterior seguí perdiendo los valores, creo que al retrasar la validación se guardarán los nuevos tipos de datos como parte de los metadatos.
En Connection Manager para ''Excel Connection Manager'', establezca Validación de retraso en False desde Propiedades.
Luego, en el flujo de datos, la tarea de destino para Excel establece ValidationExternalMetaData en False, de nuevo desde las propiedades.
Esto le permitirá hacer clic con el botón derecho en la Tarea de destino de Excel y acceder al Editor avanzado para Destino de Excel -> pestaña de la extrema derecha - Propiedades de entrada y salida. En la sección de la carpeta Columnas externas, ahora podrá cambiar los Tipos de datos y los valores de Longitud de las columnas problemáticas, y ahora puede guardarlos.
¡Buena suerte!
En lugar de agregar una Conversión de datos sugerida anteriormente, puede convertir la columna nvarchar en una columna varchar. Esto le impide tener un paso innecesario y tiene un rendimiento más alto que la alternativa.
En la selección de su instrucción SQL, reemplace la date
con CAST(date AS varchar([size]))
. Por algún motivo, esto aún no cambia el tipo de datos de salida. Para hacer esto, haga lo siguiente:
- Haga clic con el botón secundario en su paso de OLE DB Source y abra el editor avanzado.
- Ir a Propiedades de entrada y salida
- Seleccionar columnas de salida
- Seleccione su columna
- En Propiedades de tipo de datos, cambie DataType a cadena [DT_STR]
- Cambie la longitud a la longitud que especificó en su declaración CAST
Después de hacer esto, sus datos de origen se mostrarán como varchar y su error desaparecerá.
Experimenté esta condición cuando instalé el cliente de Oracle 12 cliente de 32 bits conectado a un servidor Oracle 12 que se ejecutaba en Windows. Aunque tanto Oracle-source como SqlServer-destination NO son Unicode, seguí recibiendo este mensaje, como si las columnas del Oracle fueran Unicode. Resolví el problema insertando un cuadro de conversión de datos y seleccionando tipo DT-STR (no unicode) para campos varchar2 y DT-WSTR (unicode) para campos numéricos, luego dejé caer la ''COPY OF'' del nombre del campo de salida. Tenga en cuenta que seguí recibiendo el error porque había conectado la flecha de la caja fuente con el cuadro de conversión ANTES de configurar los tipos de conversión. Así que tuve que cambiar el cuadro fuente y esto limpió todos los errores en el cuadro de destino.
He estado teniendo el mismo problema e intenté con todo lo escrito aquí, pero todavía me estaba dando el mismo error. Resultó ser un valor NULL en la columna que estaba intentando convertir.
Eliminar el valor NULL resolvió mi problema.
Saludos, Ahmed
Los siguientes pasos me funcionaron:
1). haga clic derecho en la tarea fuente.
2). haga clic en "Mostrar editor avanzado". opción de edición avanzada para la tarea fuente en ssis
3). Vaya a la pestaña "Propiedades de entrada y salida".
4). seleccione la columna de salida para la cual obtiene el error.
5). Su tipo de datos será "Cadena [DT_STR]".
6). Cambie ese tipo de datos a "Cadena Unicode [DT_WSTR]". Cambiar el tipo de datos a la cadena Unicode
7). guardar y cerrar. ¡Espero que esto ayude!