Bon, ça me fait mal de faire ça, mais j’ai eu besoin pour le boulot de convertir des bases MySQL vers MSSQL.
J’ai été bien incapable de trouver des outils libre qui font cela. Tant mieux, à la limite, parce que SQL Server, c’est vraiment de la daube.
Bref, pour ceux qui comme moi seraient coincés, voici une technique qui peut dépanner, même si elle n’est pas parfaite.
La première étape, c’est d’installer le driver ODBC pour MySQL. Ensuite, il faut configurer le connecteur dans Panneau de configuration > Outils d’administration > Source de données ODBC.
Sélectionner Ajouter et créer une nouvelle source de données en choisissant le connecteur MySQL ODBC. Il vous faudra configurer les paramètres de connexion à la base.
Ensuite, il faut créer la base à la main sous SQL Server (facile).
Supposons que vous vouliez importer la table < table >, créez une nouvelle requête, et :
EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL', @srvproduct=N'MySQL', @provider=N'MSDASQL', @provstr=N'DRIVER={MySQL ODBC 5.1 Driver}; SERVER=<server>; DATABASE=<base>; USER=<user>; PASSWORD=<pass>; PORT=<port>; OPTION=3'
Exécutez, puis lancez une nouvelle requête :
SELECT * INTO <base>.dbo.<table> FROM OPENQUERY(MySQL, 'SELECT * FROM <table>')
Il devrait créer la table et importer toutes les données. Ensuite, il vous faudra vérifier à la main les compatibilités des données, recréer les clés et les index, et tout le bazar. Mais bon, c’est mieux que rien.
3 Commentaires
Peut-on faire des create/insert/update dans mysql à partir de SQLserver ?
Je ne sais pas, mais j’en doute. Il faut regarder du côté d’ODBC, je pense.
Après 2/3 jours de recherche sur SSIS et les serveurs liés via ODBC, j’arrive effectivement à la conclusion que ce que propose SQL server en version 2005 ne fonctionne que dans un sens !
Peut-être que la version 2008 permettra l’écriture via une connexion ADO .Net dans SSIS. Actuellement le DataReaderDestination n’est pas paramétrable dans la versin 2005, donc inutilisable inutilisable sans développement (.Net) spécifique (et encore…)