Por la razón que sea puede que tengamos que desarrollar un paquete de Microsoft Integration Services que nos mueva datos de cualquier origen a una tabla que se encuentra en una base de datos MySQL.
La primera intención será hacerlo mediante una ADO.NET Destination y el provider de MySQL para la conexión. Si lo hacemos así para insertar los datos directamente, al crear el destino, seleccionar la conexión y luego seleccionamos la tabla aparecerá un error como el siguiente al comprobarlo todo con la vista previa o al intentar hacer las asignaciones.
Este error se debe a al modo de compatibilidad sql ansi de la base de datos mysql donde intentamos cargar los datos. Para solventarlo debemos conectarnos al servidor de MySQL y cambiar la compatibilidad ansi de sql de la base de datos*:
TOCA:~# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 77 Server version: 5.0.51a-24+lenny3-log (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select @@global.sql_mode; +-------------------+ | @@global.sql_mode | +-------------------+ | | +-------------------+ 1 row in set (0.00 sec)
mysql> set global sql_mode='ANSI'; Query OK, 0 rows affected (0.00 sec)
mysql> select @@global.sql_mode; +-------------------------------------------------------------+ | @@global.sql_mode | +-------------------------------------------------------------+ | REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI | +-------------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> exit |
Si volvemos a probar ya podremos tener una vista previa de la tabla o editar las asignaciones entre columnas pero nos encontraremos otro error al ejecutar el paquete:
“[ADO NET Destination [843]] Error: Excepción durante la inserción de datos. El mensaje devuelto por el proveedor es: Unknown column 'p1' in 'field list'”
El driver tiene un problema y no nos deja trabajar bien con parametros (que es como se construyen las inserciones de registros en el destino) así que tenemos que hacer otro workaround para solventar este problema: trabajar con ADO.NET Destination en destino pero con un origen ODBC en la conexión. Esto unido al tema de la modificación del sql_mode del destino MySQL nos permitirá hacer la carga correctamente.
*Cabe destacar que la compatibilidad la podemos cambiar a nivel global como en el ejemplo o solo a nivel de session (con lo que deberíamos añadir la ejecución de un comando en primera instancia para modificar el valor de @@SESSION.sql_mode). Más info aquí.
Has resuelto una duda del foro
Subido por Carlos el 9 Septiembre, 2010 - 00:40
Genial, con esta explicación resuelves un tema que se había abierto en el foro hace tiempo:
Conectar SSIS con MySQL como destino