views:

307

answers:

5

I have to move an entire database from a SQL Server 2008 machine to a SQL Server 2000 machine.

I created a backup using Management Studio 2008, copied it to the hard drive of the 2000 box, and from withing Management Studio 2008, I choose Restore Database to the 2000 box.

I get an error message stating, "The media family on device ... is incorrectly formed. SQL Server cannot restore this media family".

If I use Enterprise Manager 2000 I get the same error.

Is there a way to move a whole database from the newer SQL server to the older?

+7  A: 

only thing i can think of is to recreate the whole structure and then copy data from a live database. so, create scripts that will create the tables and views and sp's, and then create scripts to copy the data from the existing database.

DForck42
I've just finished doing this myself. The only way I found to do it was to script the entire database (including data) and run the script on the target machine. Now, this is a pain, because the 2008 DB may create a script that won't run on 2000 (well, mine did) so you will need to edit the generated script before running in 2000. Stock up on Tylenol before you start. Good luck.
BoltBait
Yes, that's the only way to do it. SQL Server has never been backwards compatible, e.g. you have never been able to restore a newer version to an older server. I don't think this is likely to change
marc_s
A: 

I've heard you can only do it by generating the SQL statement dump from the DB administrator tool and re-running those queries on the target older database.

gmagana
Of course you'll have to hand manipulate them as the script tool puts in things that 2000 won't recognize.
HLGEM
+1  A: 

you can't move backups from a newer version to an older, in that case you can script your database, execute it in the 2000 box, then you can use the standard data transfer to transfer any data you want

BlackTigerX
A: 

You can generate a script that will recreate all the objects and transfer all the data...as long as everything in the db is valid in SQL 2000. So no ROW_NUMBER(), no PARTITION, no CTEs, no datetime2, hierarchy or several other field types, no EXECUTE AS, and lots of other goodness. Basically, there's a pretty good chance it's not possible unless your db is pretty basic.

CodeByMoonlight
A: 

Provided you have a network connection between the machines use SSIS. Much easier and a lot less messing around.