2011-10-26 15 views
5

A medio camino a través de un proyecto de SSIS ciertos campos de la tabla cambiaron char(30)-nvarchar(30)SSIS conseguir tipo de columna mal con conector OLEDB

Sin embargo, cuando se ejecutan los paquetes SSIS, un error que indica cannot convert from unicode to non-unicode aparece. Estoy tratando de transferir datos directamente desde una fuente de base de datos a su destino.

Ambas conexiones usan el mismo esquema de base de datos, por lo que no debe haber ninguna conversión.

Al verificar el tipo de datos de la columna externa muestra D_STR, que ya no es el caso.

He intentado eliminar el origen y el destino con la esperanza de que pueda limpiar cualquier tipo de datos en caché, pero no funcionó.

¿Alguna idea?

Respuesta

16

Me parece que los metadatos en la tarea de flujo de datos se almacenan en caché y deben actualizarse para reflejar el nuevo tipo.

Abra la fuente, vaya a las columnas y desmarque la columna, luego verifique la columna. Haga clic en Aceptar. Los metadatos deben actualizarse ahora.

+0

Eso fue todo. No pude encontrar una manera de restablecer los metadatos almacenados en caché en el flujo, pero eso fue lo que hizo. Sin embargo, es bastante malo tener que hacer eso, ya que uno tiene que volver a crear las asignaciones en el destino: S – cfrag

+1

Piense en cada columna como una tubería por la cual fluirán los datos. En el momento del diseño, le dijo a Ssis que necesitaba una tubería capaz de dejar pasar 30 bytes. Luego, en tiempo de ejecución, trataste de meter 60 bytes a través de un conducto de 30 bytes. Al desmarcar la columna, y luego volver a verificar, obligó a ssis a revisar los datos y reemplazar el 30 con un conducto de 60 bytes. – brian

+3

Entiendo la necesidad de los metadatos. Lo que no entiendo es la falta de un botón de "actualizar metadatos de columna" para forzar ese "cambio de tamaño". En su lugar, uno tiene que volver a hacer toda la tubería. – cfrag

1

nvarchar y nchar son unicode. Por el contrario, varchar y char no son unicode.

http://msdn.microsoft.com/en-us/library/ms187752.aspx

Como resultado, si usted se está moviendo datos de un tipo de datos a otro, tendrá que realizar alguna transformación adicional (CAST o CONVERT). La otra opción es buscar en sus adaptadores de tal manera que CARácter utilizar SSIS tipo de datos de DT-STR y nvarchar utilizará SSIS Tipo de datos DT-WSTR

http://msdn.microsoft.com/en-us/library/ms141036.aspx

Sin saber cómo funcionan los paquetes que no puedo ser mucho más específicos pero espero que esto te ayude a avanzar.

+0

No estaba convirtiendo datos. El paquete era una simple "transferencia de la tabla A a la tabla B" con exactamente las mismas columnas en ambas tablas. Lo que sucedió fue que, en un cierto momento, ambas tablas cambiaron esa columna en particular, pero SSIS no pareció notarlo – cfrag

Cuestiones relacionadas