es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SSIS 2015/SQL Server 2016: algunos valores de columnas no se cargan desde AS/400.

Tenemos un problema al leer y cargar algunas columnas de AS/400 a través del proveedor OLE DB para DB2 en SSIS 2015, el proyecto está en SQL Server 2016.
Estamos migrando el proyecto desde un servidor antiguo que funciona con SQL Server 2008.
En el nuevo, cuando previsualizo los datos en la Fuente de OLE DB del Flujo de Datos, algunas columnas tienen “System.Byte[]” como valor.
Y obtengo el mensaje “Los metadatos de las siguientes columnas de salida no coinciden con los metadatos de las columnas externas con las que están asociadas las columnas de salida”.
Las columnas externas se leen como DT_BYTES, mientras que en el servidor antiguo se leían como DT_STR.
Las columnas de salida también esperan un DT_STR.

SSIS cambió los metadatos de las columnas externas, lo que las hace ilegibles.

Intenté convertirlas a cadena, pero nada funciona.

Intenté establecer “ValidateExternalMetadata” en falso, pero nada.

Lo sorprendente es que con algunas otras tablas que tienen tipos de datos similares las lee bien, tienen exactamente los mismos tipos de datos que las que fallaron.

No hay problema con el propio AS/400, ya que el SSIS 2008 antiguo lo lee todo correctamente.

Entonces, estoy seguro de que el problema es con el proveedor OL DB2, SSIS 2015 o SQL Server 2016.

No puedo forzar a leer las columnas externas como STR con el Editor Avanzado.

También intenté convertir los tipos de datos en las columnas de salida a DT_BYTES para que coincidan, pero aún así no funcionó.

Ni siquiera puede leer las columnas desde el principio.

Intenté crear un paquete completamente nuevo sin consulta, simplemente leyendo la tabla tal como está desde la fuente, pero aún así el mismo problema.

Cambié la página de códigos para que coincidiera con la original (1256), pero aún así no funcionó, luego la cambié para que coincidiera con la nueva (1252), pero aún sin éxito.

Realmente estoy atrapado y he intentado todo lo que he podido.

¿Alguna ayuda, por favor?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para leer y cargar columnas desde AS/400 a través del proveedor OLE DB para DB2 en SSIS 2015

    1. Verificar los tipos de datos: Asegurarse de que los tipos de datos de las columnas en la tabla de origen y en la tabla de destino coincidan correctamente. En caso de que no coincidan, la conversión puede causar problemas.
    2. Verificar las columnas externas: Verificar los metadatos de las columnas externas y asegurarse de que coincidan con los tipos de datos de la fuente de datos. Si los metadatos de las columnas externas no coinciden con la fuente de datos, aparecerá un mensaje de error.

    3. Validar los metadatos externos: Verificar si la opción “ValidateExternalMetadata” está configurada en “True”, ya que esto podría generar el mensaje de error mencionado anteriormente. Si está configurado en True, se validarán los metadatos de las columnas externas con los metadatos de las columnas de origen.

    4. Editor avanzado: En el “Editor avanzado”, verificar el “Tipo de datos” de cada columna, incluyendo las columnas de entrada, salida y externas. Si el tipo de datos es DT_BYTES, cambiarlo a DT_STR.

    5. Configurar la página de código: Verificar si las páginas de código tanto de AS/400 como de SQL Server 2016 coinciden. En caso de que no coincidan, intentar cambiar la opción de página de código para que coincida con la original.

    6. Utilizar la conversión de datos: Intentar utilizar la transformación de “Conversión de datos” para cambiar el tipo de datos de la columna al tipo de datos deseado.

    7. Probar en unas pocas tablas: Probar la lectura y carga de columnas en unas pocas tablas para asegurarse de que el problema no esté relacionado con una tabla específica.

    Siguiendo las soluciones mencionadas anteriormente, los usuarios pueden resolver el problema encontrado al leer y cargar algunas columnas desde AS/400 a través del proveedor OLE DB para DB2 en SSIS 2015, el proyecto se encuentra en SQL Server 2016.

Comments are closed.