[#] BCP - Bulk Copy Program - MS SQL

( Ostatnio zmieniony wt., 03/06/2008 - 13:41 )
 

Ogólny zarys

bcp   {dbtable | query} {in | out | queryout | format} datafile
 [-n native type] [-c character type]  [-S server name] [-U username] [-P password] [-T trusted connection]

Szczególny przypadek

Jeśli potrzebujesz wyeksportować całą bazę do osobnych plików wygeneruj sobie listę poleceń, a następnie wklej je do pliku .bat w celu automatycznego wywołania dumpa całej bazy.

select 'bcp  BAZA.dbo.' + name + ' out ' + name + '.txt  -c -t, -U użytkownik -P hasło' from sysobjects where xtype in ('U', 'S')

Otrzymamy coś w stylu:

bcp  BAZA.dbo.sysrowsetcolumns out sysrowsetcolumns.txt  -c -t, -U użytkownik -P hasło
bcp  BAZA.dbo.sysrowsets out sysrowsets.txt  -c -t, -U użytkownik -P hasło
bcp  BAZA.dbo.sysallocunits out sysallocunits.txt  -c -t, -U użytkownik -P hasło

co kopiujemy do pliku .bat

Import wygląda podobnie tylko zamiast out użyjemy in

Jeśli z jakiegoś powodu masz problem z sortowaniem danych eksportowanych do pliku, możesz wykorzystać do tego celu zapytanie sql.

Przykład:

bcp  "SELECT * FROM Baza.dbo.tabelka ORDER BY id" queryout TABELKA.txt  -c -t, -U użytkownik -P hasło

Użytecznym może okazać się przełącznik -S służący do określenia nazwy serwera MS SQL, oraz -e error.log do określenia pliku dla błędów.

Przypadek bardziej szczególny Jeśli z jakiegoś powodu twoja tabelka jest zbyt duża aby ją poprawnie wyeksportować (może się zdarzyć w zależności od wersji MS SQL), zastosuj poniższą metodę:

SET nocount on

DECLARE @i int, @k int, @a int
SET @i = 1
SET @k = 1600

-- max rekordów
SELECT @a = COUNT(id) FROM Baza.dbo.Tabelka

WHILE @i < @a
BEGIN
    SELECT 'bcp  "SELECT * FROM Baza.dbo.Tabelka WHERE id BETWEEN ' + CONVERT(VARCHAR, @i) + ' AND ' + CONVERT(VARCHAR, @k) + '" queryout Tabelka_'+CONVERT(VARCHAR, @i)+'.txt  -c -t, -U user -P password'
    SET @i = @k+1
    SET @k = @k + 1600
END

co pozwoli ci na wygenerowanie tylu plików ile trzeba aby w każdym z nich znalazło się nie więcej niż 1600 rekordów. Teraz pozostaje tylko kwestia sklejenia ich w całość i już.

5
Twoja ocena: Brak Średnio: 5 (2 głosy)