poniedziałek, 14 maja 2012

BCP

Cytat ze strony Narzędzie bcp (SQL Server 2008 R2):

Narzędzie bcp służy do masowego kopiowania danych pomiędzy wystąpieniem serwera Microsoft SQL Server a plikiem danych o formacie określonym przez użytkownika. Narzędzie to może być użyte do importu dużej liczby nowych wierszy do tabel serwera SQL, lub eksportu tabel do plików danych. [jaka jest liczba mnoga od „tabela”?] Z wyjątkiem użycia opcji queryout, narzędzie to nie wymaga żadnej znajomości języka Transact-SQL. Aby zaimportować dane do tabeli, konieczne jest użycie stworzonego dla niej pliku formatu, lub też zrozumienie struktury tejże tabeli oraz typów danych odpowiednich dla jej kolumn.

A tak to wygląda w praktyce.
Aby obsłużyć wynik działania narzędzia BCP należy wygenerować dwa pliki, jeden z danymi i jeden z opisem formatu danych.

Generujemy plik z danymi:
C:\Temp>bcp "SELECT * FROM DynamicsAX.DBO.CUSTTABLE WHERE DATAAREAID = 'CEU'"
        queryout CUSTTABLE.DAT -T -S OPTSBR2 -w -k -t#F# -r#R#
Powstanie nam plik C:\Temp\CUSTTABLE.DAT który będzie zawierał odbiorców z firmy CEU.
Parametry -t oraz -r określają ciągi które będą rozdzielały pola oraz rekordy w pliku wynikowym (analogicznie jak metody outFieldDelimiter oraz outRecordDelimiter w AX).

Generujemy plik z definicją formatu danych :
C:\Temp>bcp DynamicsAX.dbo.CUSTTABLE format nul -T -S OPTSBR2 -f CUSTTABLE.FMT -w -k -t#F# -r#R#
Powstanie nam plik C:\Temp\CUSTTABLE.FMT który będzie zawierał definicję tabeli CUSTTABLE.

Parametry -T -S OPTSBR2 określają połączenie do serwera SQL i powinny być zmienione przed uruchomieniem obu zapytań.

Aby odczytać zawartość wyeksportowanych plików z poziomu TSQL można posłużyć się zapytaniem:
SELECT * FROM  OPENROWSET(BULK  'C:\TEMP\CUSTTABLE.DAT', FORMATFILE='C:\TEMP\CUSTTABLE.FMT') X
Więcej informacji na stronie Narzędzie bcp (SQL Server 2008 R2).