Estoy creando un paquete donde exportaré datos de una base de datos a un archivo de Excel vacío. Cuando agregué solo los componentes de origen y destino y ejecuté el paquete, recibí un error de conversión que indica que la columna de salida y la columna "A" no pueden convertir entre tipos de datos de cadena unicode y no unicode.
Para solucionar esto, agregué un componente de conversión de datos y convertí todas las columnas a
"Cadena Unicode [DT_WSTR]"
y ya no recibí el error. El único problema es que tenía unas 50 columnas donde tenía que ir 1 por 1 y seleccionar "Cadena Unicode [DT_WSTR]" de la lista desplegable. Luego tuve que ir al componente de destino y asignar las columnas recién convertidas a mi archivo de Excel.
Mi pregunta es, si alguien más se ha encontrado con esto, ¿hay alguna forma mejor y más eficiente de evitar tener que hacer todas las conversiones manuales de tipos de datos? Tener que convertir y mapear todas las columnas una por una no parece práctico, especialmente si tiene una gran cantidad de filas.
Entiendo que los archivos de Excel no son la mejor manera de importar y exportar datos, pero es lo que se requiere en este caso particular.
Podría buscar una forma de exportar a un archivo de texto plano y luego intentar convertir a Excel como último paso en el paquete. Espero que esto no desencadene el mismo error de conversión unicode / nonunicode.
fuente
Respuestas:
Como alternativa a RDC, simplemente omitiría la conversión de los tipos de datos en SSIS y los convertiría explícitamente como nvarchar en mi consulta de origen.
Uso
En su consulta de origen (y está utilizando una consulta de origen y no simplemente seleccionando la tabla en el menú desplegable), convierta explícitamente las cosas a una longitud de caracteres n (var) apropiada.
En vez de
usar una consulta como
Los astutos estudiantes de AdventureWorks reconocerán que los datos ya eran un
n(var)char
tipo, pero esto fue simplemente para demostrar el concepto.Beneficios
Data Conversion Component
SSISfuente
CONVERT
debería ser más fácil pegar 50 veces queCAST
, ya que los argumentos están al frenteNativamente, no hay forma de hacer eso. Pero puede descargar: Reemplazar el componente de conversión de datos para SSIS de Codeplex y hacerlo de una vez.
Más información se puede encontrar aquí .
fuente
Si solo tiene que cambiar de "cadena Unicode (DT_WSTR)" a "cadena (DT_STR)" o viceversa, puede hacer esto:
Busque la cadena
DTS:DataType
si es seguida por = "130", luego la columna se define como DT_WSTR (unicode).Si es seguido por = "129", entonces la Columna se define como DT_STR (no unicode), use la búsqueda y reemplace con cuidado (hizo una copia antes, ¿no?)
Guarde el archivo y tal vez esto fue todo.
fuente