101 votes

Importer une base de données MySQL dans un serveur SQL

J'ai un .sql à partir d'un fichier MySQL contenant des tables, des définitions et des données à insérer dans ces tables. Comment puis-je convertir cette base de données représentée dans le fichier dump en une base de données SQL Server ?

1 votes

Avez-vous également accès à la base de données originale ? Ou bien le fichier d'exportation est-il tout ce dont vous disposez ?

0 votes

J'ai également perdu l'accès à la base de données originale. J'ai juste pensé qu'il serait plus facile d'utiliser le dump.

66voto

Zar Shardan Points 1305

Utilisation Assistant de migration du serveur SQL (SSMA)

Outre MySQL, il prend en charge Oracle, Sybase et MS Access.

Il semble être assez intelligent et capable de gérer même des transferts non triviaux. Il dispose également d'une interface en ligne de commande (en plus de l'interface graphique), de sorte qu'il peut théoriquement être intégré dans un processus de chargement par lots.

Voici le lien de téléchargement actuel pour la version de MySQL https://www.microsoft.com/en-us/download/details.aspx?id=54257

La version stable 6.0.1 actuelle (juin 2016) plante avec le pilote ODBC MySQL actuel (5.3.6) lors du transfert de données. Tout est en 64 bits. La version 5.3 avec le pilote ODBC 5.1.13 fonctionne correctement.

13 votes

Cet outil ne fonctionne que si vous pouvez installer un connecteur ODBC entre votre PC et votre base de données MySQL. Si vous n'avez qu'un fichier dump .sql, vous ne pouvez pas utiliser SSMA.

11 votes

Le moteur MySQL est un logiciel libre, et il existe également une version pour Windows. L'installer et charger le dump est un travail trivial. Si vous espérez trouver un outil (même commercial, et encore moins gratuit) qui convertira de manière fiable un script MySQL arbitraire en son équivalent SQL Server - eh bien, bonne chance.

1 votes

C'est un bon point. Et c'est ce que j'ai fini par faire hier. A moins d'écrire son propre utilitaire de conversion, l'installation de MySQL semble être la meilleure option. SSMA a été un casse-tête à utiliser, mais j'ai fini par le faire fonctionner.

19voto

deklin Points 154

Je vous suggère d'utiliser mysqldump comme suit :

mysqldump --compatible=mssql

phpMyAdmin est toujours une application web et pourrait potentiellement présenter certaines limitations pour les utilisateurs de la grandes bases de données (script temps d'exécution, mémoire allouable, etc.)

7 votes

Hélas, cela me pose toutes sortes de problèmes de compatibilité. Le script contiendra des backticks autour des noms de colonnes, des types de données qui n'existent pas dans MSSQL, violera la contrainte max-1000-inserts, les mots-clés auto_increment, etc. etc. Cette réponse est une suggestion logique, mais je crains qu'elle ne fonctionne pas très bien (du moins : elle n'a pas fonctionné pour moi).

1 votes

Mysqldump --compatible=ansi "Produit une sortie plus compatible avec d'autres systèmes de base de données ou avec des serveurs MySQL plus anciens. La seule valeur autorisée pour cette option est ansi, qui a la même signification que l'option correspondante pour définir le mode SQL du serveur."

1 votes

dev.mysql.com/doc/refman/8.0/fr/ - cela ne fait pas ce que vous pensez que cela fait

14voto

marionmaiden Points 694

J'ai trouvé un moyen d'y parvenir sur le net

Cela demande un peu de travail, car il faut le faire table par table. Mais de toute façon, je pourrais copier les tables, les données et les contraintes dans une base de données SQL Server.

Voici le lien

http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx

1 votes

C'est le cas lorsque Mysql et SQL se trouvent tous deux sur une même machine ou qu'ils sont connectés par l'intermédiaire d'un réseau. Cela n'est pas utile lorsque deux machines différentes existent et que vous avez un fichier Dump de Mysql, n'est-ce pas ?

10voto

Vladislav Points 176

Voici mon approche pour l'importation .sql vers le serveur SQL :

  1. Exporter une table de MySQL avec --compatible=mssql y --extended-insert=FALSE options :

    mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql

  2. Diviser le fichier exporté avec PowerShell par 300000 lignes par fichier :

    $i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}

  3. Exécuter chaque fichier dans SQL Server Management Studio

Quelques conseils comment accélérer les insertions .

Une autre approche consiste à utiliser mysqldump –where option . En utilisant cette option, vous pouvez diviser votre tableau sur n'importe quelle condition qui est prise en charge par where Clause SQL.

7voto

Whakkee Points 568

Si vous effectuez une exportation avec PhpMyAdmin Vous pouvez basculer le mode de compatibilité SQL sur "MSSQL". De cette façon, il vous suffit d'exécuter le script exporté contre votre base de données MS SQL et vous avez terminé.

Si vous ne pouvez ou ne voulez pas utiliser PhpMyAdmin, il existe également une option de compatibilité dans la rubrique mysqldump mais personnellement, je préfère que PhpMyAdmin le fasse pour moi.

1 votes

Cette réponse a fonctionné pour moi, avec des modifications minimes du script généré. Je l'ai intégré à SQL Server 2012. Je n'avais pas vu le mode de compatibilité auparavant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X