czwartek, 3 października 2013

Eksportowanie oraz importowanie danych (BCP,BULK INSERT) - MSSQL 2008 cz.6

Jedną z podstawowych czynności jakie wykonywane są w codziennej pracy w środowisku MS SQL 2008 jest eksport oraz import danych.
W celu wyeksportowania oraz zaimportowania danych użyjemy 2 różnych narzędzi:

1) BCP (Bulk Copy Program) - służy zarówno do wyeksportowania danych do pliku .txt lub .bcp (wystarczy zmienić rozszerzenie z .txt na .bcp w poniższym poleceniu) jak i importu. Dane można wyeksportować zarówno na dysk lokalny serwera jak i na udział sieciowy. Drugą możliwością jest import danych z pliku, warunkiem jest zmiana parametru out na in. Dodatkowo warto wiedzieć, że do eksportu wystarczy, aby konto użytkownika miało możliwość wykonania SELECT na bazie. Natomiast do importu konto musi posiadać możliwość wykonania poza SELECT również INSERT oraz ALTER TABLE.

Tworzymy katalog w naszym przypadku na partycji C:\ekspoerttest. Uruchamiamy cmd do niego wpisujemy:

bcp NazwaBazy.NazwaTabeli out c:\eksporttest\nazwapliku.txt -c -S NazwaServera -T

w moim przypadku chcę wyeksportować z bazy AdventureWorks2008 tabelę Person.Address, tak więc:

bcp AdventureWorks2008.Person.Address out c:\eksporttest\address.txt -c -S MSSQL2008 -T

Widzimy poniżej wykonane polecenie oraz dane, które zostały wyeksportowane do pliku.




W powyższym poleceniu wykorzystaliśmy poświadczenie jakie daje konto którym jesteśmy zalogowani do bazy. Natomiast możemy podać wprost login oraz hasło konta, z którego chcemy import wykonać, zmieniając oczywiście wcześniej parametr out na in:

bcp AdventureWorks2008.Person.Address in c:\eksporttest\address.txt -c  MSSQL2008 -U login -P hasłodokonta

Trzecią możliwością jest użycie opcji queryout , dzięki której możemy wybrać konkretne kolumny z tabeli, poniżej wygląd naszej tabeli z Osobami:





Powiedzmy, że interesują nas jedynie kolumny AddressLine1 oraz City:

bcp ,,SELECT AddressLine1, City FROM Person.Address" queryout c:\eksporttest\address.txt -c -T

2) BULK INSERT - pozwala jedynie importować dane do bazy, i w odróżnieniu od bcp robimy to z poziomu skryptu SQL.

Utwórzmy testową tabelę:

USE AdventureWorks2008
GO

CREATE TABLE DBTest(ID INT,FirstName VARCHAR(40),LastName VARCHAR(40),BirthDate SMALLDATETIME)
GO

Do pliku .text dodajmy przykładowe dane, oddzielone przecinkami ",":

1,James,Smith,19750101
2,Meggie,Smith,19790122
3,Robert,Smith,20071101
4,Alex,Smith,20040202

Sprawdźmy teraz czy możliwe będzie zaimportowanie danych do bazy:

BULK
INSERT DBTest
FROM 'c:\eksporttest\test.txt'
WITH
(
--Znaki rozdzielające wpis dla kolumn
FIELDTERMINATOR = ',',
--Informacja dla importera, że dane w wierszu już się skończyły
ROWTERMINATOR = '\n'
)
GO
--Sprawdzamy czy dane zostały zaimportowane do bazy.
SELECT *
FROM DBTest
GO
--Na koniec kasujemy tabele.
DROP TABLE DBTest
GO

W następnej części chciałbym pokazać w/w czynności przy pomocy Wizarda:)



Brak komentarzy:

Prześlij komentarz