Recently I produced a website for hosting on a Linux box running with PHP5 and MySQL5. Well it now needs to move over to a Windows 2003 server with MS SQL as the DB and IIS as opposed to Apache.
- Install MyODBC
- Install SQL Server 2005 Express
- Using MS SQL Server Management create a new database. (right click on databases in the Object Explorer)
- Use the following SQL Server SQL to create a link to your MySQL DB:
Execute the above
- Use the following PHP script to get a list of tables to import:
- Copy and paste the output from the above script into your SQL Server query window and execute it
- All your data should now have been transferred across along with the table schemas
Don’t forget to change all the references above to your correct database server settings.
Please note I have had some trouble with SQL Server not accepting 0000-00-00 00:00:00 in datetime fields set to not null in MySQL – set your datetime fields to accept null before exporting.
Also primary keys and auto_increment column attributes are not brought across either. So you will need to go into Server Management and manually re-add your auto_increment (Identity in SQL Server speak) and the primary key. It can also be done programmatically like this:
Because SQL Server doesn’t allow you to alter a pre-existing column to be an Identity (auto_increment) column you have to:
- Create a temporary table with an Identity column
- Allow arbitrary numbers to be inserted into the Identity column (includes previously inserted IDs apparently so you could end up with duplicates!)
- Move the data across to the temporary table
- Disallow inserting into the Identity column
- Drop the original table
- Rename the temporary table to the same name as the original
- Alter the Identity column to add the primary key
Wow! What a pain.