Kopiera data från SQL2000 till SQL2005 med BCP

När jag skrev om hur jag installerade SQL Server Express SP2 berättade jag att det var BCP-verktyget som jag ville ha. Det visade sig vara väldigt användbart även ifall syntaxen är rätt så krånglig att lära sig.

Nu tänkte jag göra en snabb genomgång för några av de kommandon som jag har lyckats använda och även hur jag har kopierat data från SQL Server 2000 till min lokala instans av SQL Server 2005 Express. De flesta av exemplen körs i en cmd-promt.

Exempel på kommandon

Först ett användbart kommando för att se om man kommer åt databaskopplingen.

sqlcmd -Slocalhost\SQLExpress

Sen går vi in på själva bcp-kommandona, en referens för syntaxen finns på MSDN.

Skapa en format fil som bara innehåller databasstruktur och inga data.

bcp MittDatabasNamn.dbo.MinTabell format -c -f"c:\MinFormatfil.txt" -Slocalhost\SQLExpress -T -w

Kopiera en tabell till fil.

bcp MittDatabasNamn.dbo.MinTabell out "c:\Lagringsfil.txt" -Slocalhost\SQLExpress -T -N

För att kopiera data från en fil till tabell används "in" istället för "out", så här:

bcp MittDatabasNamn.dbo.MinTabell in "c:\Lagringsfil.txt" -Slocalhost\SQLExpress -T -N

Kopiera data från SQL 2000 till SQL 2005

Med hjälp av dessa kommandon lyckades jag exportera data från SQL Server 2000 och sedan importera dem till min lokala instans, här kommer stegen jag genomförde.

1. Först skapade jag en textfil lokalt med bcp-kommandot. Denna behövde jag ha som en mall för att klistra in innehållet ur textfilen som kommer från exportdatabasen på SQL 2000. Det gick inte att kopiera denna fil direkt eftersom jag då fick ett fel som sa något som "ett ogiltigt filslutstecken <EOF> påträffades i BCP-datafilen".

2. Jag kunde inte använda bcp från cmd-promten på vår Windows2003-server men hittade en annan lösning för att exportera data till en fil. Ifrån Query Analysern körde jag följande query.

execute master..xp_cmdshell 'bcp MittDatabasNamn.dbo.MinTabell out d:\Lagringsfil.txt -SNamnPåServer -T -w'

3. Sedan kopierade jag innehållet i exportfilen till den lokala fil som skapades i steg 1.

4. Slutligen körde jag bcp-kommandot och mina data fanns på plats.

bcp MittDatabasNamn.dbo.MinTabell in "c:\Lagringsfil.txt" -Slocalhost\SQLExpress -T -N

Här är lite olika referenser som hjälpte mig på vägen.

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1071667&SiteID=1

http://simple-talk.com/sql/database-administration/creating-csv-files-using-bcp...

http://www.issociate.de/board/post/180881/BCP_Format_File.html

http://msdn2.microsoft.com/en-us/library/ms162802.aspx

http://msdn2.microsoft.com/en-us/library/ms191212.aspx