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 ?
Réponses
Trop de publicités?J'ai eu un problème très similaire aujourd'hui - je devais copier une grande table (5 millions de lignes) de MySql vers MS SQL.
Voici les étapes que j'ai suivies (sous Ubuntu Linux) :
-
Création d'une table dans MS SQL dont la structure correspond à la table source dans MySql.
-
Ligne de commande MS SQL installée : https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
-
Déchargement d'une table de MySql dans un fichier :
mysqldump \ --compact \ --complete-insert \ --no-create-info \ --compatible=mssql \ --extended-insert=FALSE \ --host "$MYSQL_HOST" \ --user "$MYSQL_USER" \ -p"$MYSQL_PASS" \ "$MYSQL_DB" \ "$TABLE" > "$FILENAME"
-
Dans mon cas, le fichier dump était assez volumineux, j'ai donc décidé de le diviser en plusieurs petits morceaux (1000 lignes chacun).
split --lines=1000 "$FILENAME" part-
-
Enfin, j'ai itéré sur ces petits fichiers, j'ai effectué quelques remplacements de texte et j'ai exécuté les morceaux un par un contre le serveur MS SQL :
export SQLCMD=/opt/mssql-tools/bin/sqlcmd
x=0
for file in part-* do echo "Exporting file [$file] into MS SQL. $x thousand(s) processed"
replaces \' with ''
sed -i "s/\\\'/''/g" "$file"
removes all "
sed -i 's/"//g' "$file"
allows to insert records with specified PK(id)
sed -i "1s/^/SET IDENTITY_INSERT $TABLE ON;\n/" "$file"
"$SQLCMD" -S "$AZURE_SERVER" -d "$AZURE_DB" -U "$AZURE_USER" -P "$AZURE_PASS" -i "$file" echo "" echo ""
x=$((x+1)) done
echo "Done"
Bien entendu, vous devrez remplacer mes variables comme $AZURE_SERVER
, $TABLE
avec les vôtres.
J'espère que cela vous aidera.
Pour moi, la meilleure solution consiste à exporter toutes les données à l'aide de cette commande :
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert=FALSE est nécessaire pour éviter la limite d'importation de 1000 lignes de mssql.
J'ai créé mes tables avec mon outil de migration, donc je ne suis pas sûr que le CREATE du fichier backup.sql fonctionnera.
Dans le SSMS de SQL Server, j'ai dû importer les données table par table avec IDENTITY_INSERT ON pour écrire les champs ID :
SET IDENTITY_INSERT dbo.app_warehouse ON;
GO
INSERT INTO "app_warehouse" ("id", "Name", "Standort", "Laenge", "Breite", "Notiz") VALUES (1,'01','Bremen',250,120,'');
SET IDENTITY_INSERT dbo.app_warehouse OFF;
GO
Si vous avez des relations, vous devez d'abord importer l'enfant, puis la table avec la clé étrangère.
Vous pouvez également utiliser 'ODBC' + 'SQL Server Import and Export Wizard'. Le lien ci-dessous le décrit : https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Vous pouvez utiliser l'application sqlie pour convertir MySQL en SQL Server. vous pouvez regarder cette vidéo https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s
- Réponses précédentes
- Plus de réponses
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.