SSIS: Solución a dos errores sin motivo aparente cuando insertamos datos en MySql

SSIS: Solució a dos errors sense motiu aparent quan inserim dades en MySól il_masacratore 10 September, 2010 - 13:52

 

 

Per la raó que sigui potser haguem de desenvolupar un paquet de Microsoft Integration Services que ens mogui dades de qualsevol origen a una taula que es troba en una base de dades MySQL.

La primera intenció serà fer-ho mitjançant una ADO.NET Destination i el provider de MySQL per a la connexió. Si ho fem així per inserir les dades directament, en crear el destí, seleccionar la connexió i després seleccionem la taula apareixerà un error com el següent al comprovar tot amb la vista prèvia o en intentar fer les assignacions.

 

 

Aquest error es deu a la manera de compatibilitat sql ansi de la base de dades mysql on intentem carregar les dades. Per solucionar hem de connectar al servidor de MySQL i canviar la compatibilitat ansi de sql de la base de dades *:

 

 

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 tornem a provar ja podrem tenir una vista prèvia de la taula o editar les assignacions entre columnes però ens trobarem un altre error en executar el paquet:

 

[ADO NET Destination [843]] Error: Excepció durant la inserció de dades.  El missatge retornat pel proveïdor és: Unknown column 'p1' in 'field list' "

El driver té un problema i no ens deixa treballar bé amb paràmetres (que és com es construeix les insercions de registre en el destino) així que hem de fer otro workaround para solucionar este problema: treballar amb ADO.NET Destination en destino però amb 1 origen ODBC en la connexió. Això unit al tema de la modificació del sql_mode de la destinació MySQL ens permetrà fer la càrrega correctament.

 

 


 

* Cal destacar que la compatibilitat la podem canviar a nivell global com en l'exemple o només a nivell de session (amb el que hauríem d'afegir l'execució d'un comandament en primera instància per modificar el valor de @ @ SESSION.sql_mode). Más info aquí. Més info aquí.