Próbowałem zrobić wydaje się prostą rzecz. Poprzez bcp wyeksportować dane w postaci czytelnego tekstu do pliku, przenieść plik na drugi serwer i tam go zaimportować.
Zacząłem od przygotowania format file (tutaj bazuję na bazie AdventureWorks2012):
bcp adventureworks2012.HumenResources.Department format null -f c:\temp\format.fmt -TKolejny krok to wyeksportowanie danych na jednym serwerze:
bcp AdventureWorks2012.HumanResources.Department out c:\temp\dane.txt -f c:\temp\format.fmt -TDo tej pory wszystko było OK. (Na potrzeby testu możesz teraz zeskryptować tabelę HumanResources.Department, zmienić nazwę na Department2 i usunąć dla kolumny department ID modyfikator IDENTITY. Możesz także usunąć linijkę constraina PRIMARY KEY lub zmienić jego nazwę dopisując np „2”)
Teraz decydujący moment. Importujemy dane:
bcp AdventureWorks2012.HumanResources.Department2 in c:\temp\dane.txt -f c:\temp\format.fmt -TA tu niespodzianka (najważniejsze fragmenty błędów poniżej
C:\Users\Rafal>bcp AdventureWorks2008r2.HumanResources.Department in c:\temp\a.t xt -T -f Department-c.fmt
Starting copy… SQLState = 23000, NativeError = 515 Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Cannot insert the value NULL into column 'GroupName’, table 'AdventureWorks2008R2.HumanResources.D epartment’; column does not allow nulls. INSERT fails. SQLState = 01000, NativeError = 3621 Warning = [Microsoft][SQL Server Native Client 10.0][SQL Server]The statement ha s been terminated.
Jak to! Do jasnej choinki! Eksportowałem tym samym porgamem, tym samym programem importuję i klapa!
Oto przyczyna:
bcp w wersji 2008, a na takiej pracowałem się… zepsuło. Eksport do pliku dodawał nową pustą linię. Import czytał tę linię, nic tam nie znajdował, więc konwertował dane na null i się wysypywał. Przed importem trzeba by usunąć znak pustej linii, lub policzyć ilość wierszy i nie importować ostatniejgo wiersza (umożliwia opcja -L). Na szczęście chłopaki z MS poprawili usterkę i w 2012 działa już dobrze.
To pokazuje również, że CONNECT do zgłaszania usterek w oprogramowaniu Microsoft działa. Brawo!
Komentarze:
[…] do SQL Server z plików tekstowych. W poniższych przykłądach wykorzystuję plik format file. Tutaj znajdziesz informację, jak go […]