Ett projekt jag jobbar nu med kräver att jag bland annat måste importera över befintlig data ifrån en MySQL databas till en MSSQL databas. Detta visade sig vara extremt klurigt eftersom MySQL databasen inte tillåter externa uppkopplingar. Jag försökte först göra en SQL dump från phpMyAdmin och ändra massor i den filen då syntaxen för MSSQL är ganska annorlunda. Detta fick jag aldrig att fungera och för att få det att fungera skulle jag nog ha fått lagt ner mängder med tid på det.
Hittade efter mycket om och men en lösning här. Jag började med att lägga in MySQL dumpen i min egen MySQL-server. Efter det laddade jag ner ODBC-drivare för MySQL-versionen jag kör här. Sedan körde jag följande kod i en query i SQL Management Studio.
EXEC master.dbo.sp_addlinkedserver
@server = N´MYSQL´,
@srvproduct=N´MySQL´,
@provider=N´MSDASQL´,
@provstr=N´DRIVER={MySQL ODBC 5.1 Driver}; SERVER=127.0.0.1; DATABASE=db_name; USER=user; PASSWORD=pass; OPTION=3´
Enda man behöver ändra i koden ovan är adressen till servern, databasnamnet (i MySQL), användarnamnet och lösenordet. Detta skapar en ODBC connection mellan MSSQL och MySQL så att MSSQL kan importera data ifrån MySQL direkt. Man behöver inte ens skapa tabellerna utan allt följer med.
Efter det så kör man följande kod för varje tabell man vill kopiera över.
SELECT * INTO [target_mssql_db].dbo.[target_mssql_table]
FROM openquery(MySQL, ´select * from mysql_db_name.mysql_tablename´)
I denna kod måste man ändra target_mssql_db, target_mssql_table, mysql_db_name och mysql_tablename så de stämmer. Tabellerna behöver alltså inte finnas i MSSQL redan utan de skapas med namnet man sätter i target_mssql_table.
Det enda jag fick lite problem med var fält i MySQL av typen date. De stod som Not Null i MySQL och jag fick sätta om dem som Null för att kunna importera dem. Vet inte varför det blev så men det gjorde inget i alla fall.
OBS! I all kod ovan måste du ersätta ´ med SQLs tecken. Jag kan inte spara ner detta tecken i databasen eftersom SQL då tolkar koden.