Udostępnij za pośrednictwem


Narzędzie BCP

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Narzędzie programu do kopiowania zbiorczego (bcp) kopiuje dane między wystąpieniem programu Microsoft SQL Server i plikiem danych w formacie określonym przez użytkownika.

Aby użyć narzędzia bcp w systemie Linux, zobacz Instalowanie narzędzi wiersza polecenia sqlcmd i bcp programu SQL Server w systemie Linux. Aby uzyskać szczegółowe informacje na temat używania narzędzia bcp z usługą Azure Synapse Analytics, zobacz Ładowanie danych za pomocą narzędzia bcp.

Narzędzie bcp może służyć do importowania dużej liczby nowych wierszy do tabel programu SQL Server lub eksportowania danych z tabel do plików danych. Z wyjątkiem sytuacji, gdy jest używana z opcją queryout , narzędzie nie wymaga znajomości języka Transact-SQL. Aby zaimportować dane do tabeli, musisz użyć pliku formatu utworzonego dla tej tabeli lub poznać strukturę tabeli i typy danych, które są prawidłowe dla jego kolumn.

Uwaga

Jeśli używasz narzędzia bcp do tworzenia kopii zapasowych danych, utwórz plik formatu w celu zarejestrowania formatu danych. Pliki danych bcpnie zawierają żadnych informacji o schemacie ani formacie, więc jeśli tabela lub widok zostanie porzucony i nie masz pliku formatu, może nie być możliwe zaimportowanie danych.

Aby zapoznać się z konwencjami składni używanymi do składni narzędzia bcp , zobacz Transact-SQL konwencje składni.

Aby uzyskać informacje na temat programu bcp w systemach Linux i macOS, zobacz Zagadnienia dotyczące narzędzia bcp w systemach Linux i macOS.

Pobierz najnowszą wersję narzędzia bcp

Narzędzia wiersza polecenia są ogólnie dostępne, ale są wydawane z pakietem instalatora dla programu SQL Server 2019 (15.x) i nowszych wersji.

Informacje o wersji

  • Numer wydania: 15.0.4298.1
  • Numer kompilacji: 15.0.4298.1
  • Data wydania: 7 kwietnia 2023 r.

Narzędzie bcp obsługuje uwierzytelnianie Microsoft Entra, w tym obsługę uwierzytelniania wieloskładnikowego (MFA) dla usługi Azure SQL Database, bazy danych SQL w usłudze Microsoft Fabric i Azure Synapse Analytics.

Uwaga

Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

Wymagania systemowe

  • Windows 8, Windows 8.1, Windows 10, Windows 11
  • Windows Server 2016, Windows Server 2019, Windows Server 2022

Ten składnik wymaga najnowszego sterownika Microsoft ODBC 17 dla programu SQL Server.

Aby sprawdzić wersję narzędzia bcp , wykonaj bcp -v polecenie i upewnij się, że jest używana wersja 15.0.4298.1 lub nowsza.

Obsługa protokołu TDS 8.0

Program SQL Server 2025 (17.x) w wersji zapoznawczej wprowadza obsługę TDS 8.0 dla narzędzia bcp .

Składnia

bcp [database_name.] schema.{table_name | view_name | "query"}
    {in data_file | out data_file | queryout data_file | format nul}

    [-a packet_size]
    [-b batch_size]
    [-c]
    [-C { ACP | OEM | RAW | code_page } ]
    [-d database_name]
    [-D]
    [-e err_file]
    [-E]
    [-f format_file]
    [-F first_row]
    [-G Microsoft Entra authentication]
    [-h"hint [,...n]"]
    [-i input_file]
    [-k]
    [-K application_intent]
    [-l login_timeout]
    [-L last_row]
    [-m max_errors]
    [-n]
    [-N]
    [-o output_file]
    [-P password]
    [-q]
    [-r row_term]
    [-R]
    [-S [server_name[\instance_name]]]
    [-t field_term]
    [-T]
    [-U login_id]
    [-u]
    [-v]
    [-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170)]
    [-w]
    [-x]
    [-Y[s|m|o]]

Zagadnienia i ograniczenia

  • Narzędzie bcp ma ograniczenie, że komunikat o błędzie zawiera tylko 512-bajtowe znaki. Wyświetlane są tylko pierwsze 512 bajtów komunikatu o błędzie.

Zagadnienia dotyczące narzędzia bcp w systemach Linux i macOS

  • Terminacją pola jest tabulator (\t).

  • Terminator wiersza jest nowym wierszem (\n).

  • Tryb znaków jest preferowanym formatem plików formatu bcp i plików danych, które nie zawierają znaków rozszerzonych.

  • Ukośnik odwrotny (\) w argumencie wiersza polecenia musi być cytowany lub uniknięty. Aby na przykład określić nowy wiersz jako niestandardowy terminator wierszy, należy użyć jednego z następujących mechanizmów:

    • -r\\n
    • -r"\n"
    • -r'\n'

Opcje wiersza polecenia

W poniższej tabeli wymieniono opcje wiersza polecenia dostępne w narzędziu bcp oraz obsługiwane przez nie systemy operacyjne.

Opcja w linii poleceń Obsługiwane na Windows Obsługiwane w systemach Linux i macOS
[database_name.]schemat.{table_name | view_name | "zapytanie"} Tak Tak
{wdata_file | outdata_file | queryoutdata_file | format nul} Tak Tak
-a packet_size Tak Tak
-b batch_size Tak Tak
-c Tak Tak
-C { ACP | OEM | RAW | code_page } Tak Nie.
-d database_name Tak Tak
-D Tak Tak
-e err_file Tak Tak
-E Tak Tak
-f format_file Tak Tak
-F first_row Tak Tak
-G Uwierzytelnianie Microsoft Entra Tak Tak
-h"hint [,... n]" Tak Nie.
-i input_file Tak Nie.
-k Tak Tak
-K zamiar_aplikacji Tak Tak
-l login_timeout Tak Tak
-L ostatni_wiersz Tak Tak
-m max_errors Tak Tak
-n Tak Tak
-N Tak Nie.
-o plik_wyjściowy Tak Nie.
-P hasło Tak Tak
-q Tak Tak
- r row_term Tak Tak
-R Tak Tak
-S [server_name[\instance_name]] Tak Tak
-t field_term Tak Tak
-T Tak Tak
-U login_id Tak Tak
-u Tak 1 Tak
-v Tak Tak
-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170 ) Tak Nie.
-w Tak Tak
-x Tak Nie.
-Y[s|m|o] Tak 1 Tak

Tak1 SQL Server 2025 (17.x) wersja przedpremierowa i nowsze wersje.

database_name

Nazwa bazy danych, w której znajduje się określona tabela lub widok. Jeśli nie zostanie określony, jest to domyślna baza danych użytkownika.

Możesz również jawnie określić nazwę bazy danych za pomocą -d.

schemat

Nazwa właściciela tabeli lub widoku. Schemat jest opcjonalny, jeśli użytkownik wykonujący operację jest właścicielem określonej tabeli lub widoku. Jeśli schemat nie jest określony, a użytkownik wykonujący operację nie jest właścicielem określonej tabeli ani widoku, program SQL Server zwraca komunikat o błędzie i operacja zostanie anulowana.

table_name

Nazwa tabeli docelowej podczas importowania danych do programu SQL Server (in) i tabeli źródłowej podczas eksportowania danych z programu SQL Server (out).

view_name

Nazwa widoku docelowego podczas kopiowania danych do programu SQL Server (in) i widoku źródłowego podczas kopiowania danych z programu SQL Server (out). Tylko widoki, w których wszystkie kolumny odwołują się do tej samej tabeli, mogą być używane jako widoki docelowe. Aby uzyskać więcej informacji na temat ograniczeń dotyczących kopiowania danych do widoków, zobacz INSERT.

"zapytanie"

Zapytanie Transact-SQL zwracające zestaw wyników. Jeśli zapytanie zwraca wiele zestawów wyników, do pliku danych jest kopiowany tylko pierwszy zestaw wyników; kolejne zestawy wyników są ignorowane. Użyj podwójnych cudzysłowów wokół zapytania i pojedynczych cudzysłowów wokół wszystkich elementów osadzonych w zapytaniu. queryout należy również określić podczas zbiorczego kopiowania danych z zapytania.

Zapytanie może odwoływać się do procedury składowanej, o ile wszystkie tabele, do których odwołuje się procedura składowana, istnieją przed wykonaniem instrukcji bcp . Jeśli na przykład procedura składowana generuje tymczasową tabelę, instrukcja bcp kończy się niepowodzeniem, ponieważ tabela tymczasowa jest dostępna tylko w czasie wykonywania, a nie podczas wykonania instrukcji. W takim przypadku rozważ wstawienie wyników procedury składowanej do tabeli, a następnie skopiowanie danych z tabeli do pliku danych za pomocą narzędzia bcp .

w

Kopiuje z pliku do tabeli lub widoku w bazie danych. Określa kierunek kopiowania masowego.

na zewnątrz

Kopiuje z tabeli bazy danych lub widoku do pliku. Określa kierunek kopiowania masowego.

Jeśli określisz istniejący plik, plik zostanie zastąpiony. Gdy narzędzie bcp wyodrębnia dane, reprezentuje pusty ciąg jako null i ciąg null jako pusty ciąg.

data_file

Pełna ścieżka pliku danych. Gdy dane są importowane zbiorczo do programu SQL Server, plik danych zawiera dane do skopiowania do określonej tabeli lub widoku. Gdy dane są eksportowane zbiorczo z programu SQL Server, plik danych zawiera dane skopiowane z tabeli lub widoku. Ścieżka może mieć od 1 do 255 znaków. Plik danych może zawierać maksymalnie 2^63–1 wiersze.

limit zapytania

Kopie pochodzące z zapytania muszą być określone tylko podczas zbiorczego kopiowania danych z zapytania.

formatowanie

Tworzy plik formatu na podstawie określonej opcji (-n, -c, -wlub -N) oraz ograniczników tabeli lub widoku. Podczas zbiorczego kopiowania danych polecenie bcp może odwoływać się do pliku z formatem, co pozwala uniknąć ponownego wprowadzania informacji o formacie w trybie interaktywnym. Opcja format wymaga opcji -f; utworzenie pliku w formacie XML również wymaga opcji -x. Aby uzyskać więcej informacji, zobacz Tworzenie pliku formatu za pomocą narzędzia bcp (SQL Server). Musisz określić nul jako wartość (format nul).

-a rozmiar_pakietu

Określa liczbę bajtów, na pakiet sieciowy, wysyłany do i z serwera. Opcję konfiguracji serwera można ustawić przy użyciu programu SQL Server Management Studio (lub sp_configure procedury składowanej systemu). Jednak opcja konfiguracji serwera może zostać zastąpiona pojedynczo przy użyciu tej opcji. packet_size mogą być z zakresu od 4096 bajtów do 65 535 bajtów; wartość domyślna to 4096.

Zwiększony rozmiar pakietu może zwiększyć wydajność operacji kopiowania zbiorczego. Jeśli zażądano większego pakietu, ale nie można go udzielić, zostanie użyta wartość domyślna. Statystyki wydajności wygenerowane przez narzędzie bcp pokazują używany rozmiar pakietu.

-b batch_size

Określa liczbę wierszy na partię zaimportowanych danych. Każda partia jest importowana i rejestrowana jako oddzielna transakcja, która importuje całą partię przed jego zatwierdzaniem. Domyślnie wszystkie wiersze w pliku danych są importowane jako jedna partia. Aby rozłożyć wiersze między wiele partii, określ batch_size , która jest mniejsza niż liczba wierszy w pliku danych. Jeśli transakcja dla dowolnej partii nie powiedzie się, tylko wstawienia z bieżącej partii zostaną wycofane. Partie, które zostały już zaimportowane przez zatwierdzone transakcje, nie mają wpływu na późniejszą awarię.

Nie używaj tej opcji z opcją -h "ROWS_PER_BATCH=<bb>" .

-c

Wykonuje operację przy użyciu typu danych znaków. Ta opcja nie wyświetla monitu dla każdego pola; używa znaku jako typu magazynu, bez prefiksów i (\t znak tabulacji) jako separatora pola oraz (\r\n znak nowego wiersza) jako terminatora wierszy. -c nie jest zgodny z elementem -w.

Aby uzyskać więcej informacji, zobacz Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu znaków.

-C { ACP | OEM | RAW | strona kodowa }

Dotyczy: tylko dla Windows. Nieobsługiwane w systemach Linux i macOS.

Określa stronę kodów danych w pliku danych. code_page jest istotne tylko wtedy, gdy dane zawierają kolumny char, varchar lub text z wartościami znaków większymi niż 127 lub mniejsza niż 32.

Należy określić nazwę sortowania dla każdej kolumny w pliku formatu, z wyjątkiem sytuacji, gdy chcesz, aby opcja 65001 miała priorytet w specyfikacji sortowania/strony kodowej.

Wartość strony kodowej Opis
ACP ANSI/Microsoft Windows (ISO 1252).
OEM Domyślna strona kodowa używana przez klienta. Jest to domyślna strona kodowa używana, jeśli -C nie jest określona.
RAW Nie ma konwersji z jednej strony kodu na inną. Jest to najszybsza opcja, ponieważ nie ma konwersji.
<code_page> Określony numer strony kodowej; na przykład 850.

Wersje przed wersją 13 (SQL Server 2016 (13.x)) nie obsługują strony kodowej 65001 (kodowanie UTF-8). Wersje rozpoczynające się od wersji 13 mogą importować kodowanie UTF-8 do wcześniejszych wersji programu SQL Server.

-d database_name

Określa bazę danych do nawiązania połączenia. Domyślnie narzędzie bcp łączy się z domyślną bazą danych użytkownika. Jeśli określono zarówno -d <database_name>, jak i nazwę w formacie trójczłonowym (database_name.schema.table, użyta jako pierwszy parametr do bcp), wystąpi błąd, ponieważ nie można dwukrotnie określić nazwy bazy danych. Jeśli database_name zaczyna się od łącznika (-) lub ukośnika (/), nie dodaj spacji między -d i nazwą bazy danych.

-D

Powoduje, że wartość przekazana do opcji bcp -S jest interpretowana jako nazwa źródła danych (DSN).

DSN może służyć do:

  • włączanie opcji sterownika, aby uprościć wiersze poleceń
  • wymuszanie opcji sterowników, które nie są inaczej dostępne z poziomu wiersza polecenia, takich jak MultiSubnetFailover,
  • lub w celu ochrony poufnych poświadczeń przed tym, by były dostępne jako argumenty wiersza polecenia.

Więcej informacji można znaleźć w sekcji Obsługa DSN w sqlcmd i bcp.

-e err_file

Określa pełną ścieżkę pliku błędu używanego do przechowywania wierszy, których narzędzie bcp nie może przenieść z pliku do bazy danych. Komunikaty o błędach z polecenia bcp są wysyłane na stację roboczą użytkownika. Jeśli ta opcja nie jest używana, plik błędu nie zostanie utworzony.

Jeśli err_file zaczyna się od łącznika (-) lub ukośnika (/), nie umieszczaj spacji pomiędzy -e a wartością err_file.

-E

Określa, że wartość tożsamości lub wartości w zaimportowanych plikach danych mają być używane dla kolumny tożsamości. Jeśli -E nie zostanie podana, wartości tożsamości dla tej kolumny w importowanym pliku danych są ignorowane, a program SQL Server automatycznie przypisuje unikatowe wartości na podstawie wartości inicjacji i przyrostów określonych podczas tworzenia tabeli. Aby uzyskać więcej informacji, zobacz DBCC CHECKIDENT.

Jeśli plik danych nie zawiera wartości kolumny tożsamości w tabeli lub widoku, użyj pliku formatu, aby określić, że kolumna tożsamości w tabeli lub widoku powinna zostać pominięta podczas importowania danych. Program SQL Server automatycznie przypisuje unikatowe wartości dla kolumny.

Opcja -E ma specjalne wymaganie dotyczące uprawnień. Aby uzyskać więcej informacji, zobacz "Uwagi" w dalszej części tego artykułu.

-f format_file

Określa pełną ścieżkę pliku formatu. Znaczenie tej opcji zależy od środowiska, w którym jest używany, w następujący sposób:

  • Jeśli -f jest używana z opcją format , określona format_file jest tworzona dla określonej tabeli lub widoku. Aby utworzyć plik formatu XML, określ również opcję -x. Aby uzyskać więcej informacji, zobacz Tworzenie pliku formatu za pomocą narzędzia bcp (SQL Server).

  • Jeśli jest używana z opcją in lub out , -f wymaga istniejącego pliku formatu.

    Uwaga

    Użycie pliku formatu z opcją in lub out jest opcjonalne. W przypadku braku opcji -f, jeśli -n, -c, -w lub -N nie są określone, wiersz polecenia wyświetla informacje o formacie i umożliwia zapisanie odpowiedzi w pliku formatu (którego domyślna nazwa to bcp.fmt).

Jeśli format_file zaczyna się od łącznika (-) lub ukośnika (/), nie dołączaj spacji między -fa wartością format_file.

-F first_row

Określa liczbę pierwszego wiersza do wyeksportowania z tabeli lub zaimportowania z pliku danych. Ten parametr wymaga wartości większej niż (>) 0, ale mniejszej niż (<) lub równej (=) całkowitej liczby wierszy. W przypadku braku tego parametru wartość domyślna to pierwszy wiersz pliku.

first_row może być dodatnią liczbą całkowitą o wartości do 2^63–1. -F first_row jest oparty na 1.

-G

Dotyczy: Usługa Azure SQL Database, baza danych SQL w usłudze Microsoft Fabric i tylko usługa Azure Synapse Analytics.

Ten przełącznik jest używany przez klienta do określenia, czy użytkownik jest uwierzytelniany za pomocą identyfikatora Microsoft Entra. Przełącznik -G wymaga wersji 14.0.3008.27 lub nowszej. Aby określić wersję, wykonaj bcp -v. Aby uzyskać więcej informacji, zobacz Use Microsoft Entra authentication with SQL Database or Azure Synapse Analytics or Authentication in SQL Database in Microsoft Fabric (Używanie uwierzytelniania firmy Microsoft Entra z usługą SQL Database lub Azure Synapse Analytics lub uwierzytelnianie w bazie danych SQL w usłudze Microsoft Fabric).

Ważne

W systemach Linux i macOS interakcyjne uwierzytelnianie firmy Microsoft Entra nie jest obecnie obsługiwane. Microsoft Entra zintegrowane uwierzytelnianie wymaga sterownika Microsoft ODBC Driver 17 dla programu SQL Server w wersji 17.6.1 lub nowszej oraz prawidłowo skonfigurowanego środowiska Kerberos.

Aby sprawdzić, czy twoja wersja narzędzia bcp obejmuje obsługę uwierzytelniania Microsoft Entra, wpisz bcp --help i sprawdź, czy widzisz -G na liście dostępnych argumentów.

  • Nazwa użytkownika i hasło firmy Microsoft Entra

    Jeśli chcesz użyć danych logowania Microsoft Entra, możesz zapewnić opcję -G i także skorzystać z danych logowania, podając opcje -U i -P.

    Poniższy przykład eksportuje dane przy użyciu poświadczeń Microsoft Entra, obejmujących nazwę użytkownika i hasło. Przykład eksportuje tabelę bcptest z bazy danych testdb z serwera aadserver.database.windows.net platformy Azure i przechowuje dane w pliku c:\last\data1.dat:

    bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
    

    Poniższy przykład importuje dane przy użyciu poświadczeń użytkownika firmy Microsoft Entra. Przykład importuje dane z pliku c:\last\data1.dat do tabeli bcptest dla bazy danych testdb na serwerze aadserver.database.windows.net platformy Azure przy użyciu nazwy użytkownika i hasła firmy Microsoft Entra:

    bcp bcptest in "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
    
  • Microsoft Entra integrated

    W przypadku użycia zintegrowanego uwierzytelniania Microsoft Entra podaj opcję bez nazwy użytkownika lub hasła. Ta konfiguracja wymaga, aby bieżące konto użytkownika systemu Windows (konto, w którym jest uruchomione polecenie bcp ) było federacyjne z identyfikatorem Microsoft Entra:

    Poniższy przykład eksportuje dane przy użyciu zintegrowanego uwierzytelniania firmy Microsoft. Przykład eksportuje tabelę bcptest z bazy danych testdb na serwerze aadserver.database.windows.net logicznym i przechowuje dane w pliku c:\last\data2.datprzy użyciu poświadczeń systemu Windows federacyjnych z identyfikatorem Microsoft Entra:

    bcp bcptest out "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c
    

    Poniższy przykład importuje dane przy użyciu zintegrowanego uwierzytelniania firmy Microsoft. Przykład importuje dane z tabeli plików c:\last\data2.dat do tabeli bcptest w bazie danych testdb na serwerze logicznym aadserver.database.windows.net, przy użyciu poświadczeń systemu Windows sfederowanych z Microsoft Entra ID.

    bcp bcptest in "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c
    
  • Tożsamość zarządzanej usługi Microsoft Entra

    Ważne

    bcp jest ściśle powiązany ze sterownikiem. Główne wersje zarówno narzędzia bcp, jak i sterownika, z którym tworzona jest nazwa DSN, muszą być takie same. Aby określić wersję, wykonaj bcp -v.

    Eksportowanie danych za pomocą narzędzia bcp przy użyciu zarządzanej tożsamości usługi w systemie Windows wymaga skonfigurowania DSN.

    Aby skonfigurować DSN w systemie Windows:

    1. Naciśnij klawisz Windows na klawiaturze

    2. Wpisz ODBC i wybierz odpowiednią wersję administratora źródła danych ODBC

    3. Wybierz kartę DSN użytkownika lub System DSN

    4. Wybierz pozycję Dodaj i postępuj zgodnie z monitami

    5. Po wyświetleniu monitu o typ uwierzytelniania wybierz pozycję Uwierzytelnianie tożsamości usługi zarządzanej platformy Azure

    6. Jeśli masz tożsamość zarządzaną przypisaną użytkownikowi, wklej wartość tożsamości w polu Object (principal) ID w dolnej sekcji karty uwierzytelniania

    7. Aby skonfigurować DSN, postępuj zgodnie ze wskazówkami.

    Aby zapoznać się z pełną instrukcją, w tym zrzutami ekranu, zobacz Tworzenie i edytowanie DSN w interfejsie użytkownika.

    Po skonfigurowaniu nazwy DSN, można wywołać narzędzie bcp z flagą , aby wskazać, że przekazana wartość -D jest nazwą DSN.

    bcp bcptest out "c:\last\data1.dat" -c -D -S myDSN -d testdb
    

  • Token dostępu Microsoft Entra ID

    Dotyczy: Tylko systemy Linux i macOS. System Windows nie jest obsługiwany.

    Użytkownicy programu bcp w wersji 17.8 lub nowszej w systemach Linux i macOS mogą również uwierzytelniać się przy użyciu tokenu. W poniższych przykładach program PowerShell w systemie Linux umożliwia pobranie tokenu dostępu.

    Ten przykład pobiera token dostępu i umieszcza go w pliku w celu wyeksportowania danych przy użyciu tożsamości zarządzanej przypisanej przez system.

    Connect-AzAccount -Identity
    $access_token | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
    bcp bcptest out data2.dat -S aadserver.database.windows.net -d testdb -G -P /tmp/tokenFile -c
    

    Ten przykład przekazuje Client ID do parametru -AccountId w Connect-AzAccount , aby pobrać token dostępu i umieścić go w pliku tokenów. Token jest następnie używany do eksportowania danych przy użyciu określonej tożsamości zarządzanej przypisanej przez użytkownika.

    Connect-AzAccount -Identity -AccountId 'client_id_of_user_assigned_managed_identity'
    $access_token | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
    bcp bcptest out data2.dat -S aadserver.database.windows.net -d testdb -G -P /tmp/tokenFile -c
    
  • Interakcyjne rozwiązanie Microsoft Entra

    Dotyczy: tylko dla Windows. Systemy Linux i macOS nie są obsługiwane.

    Interakcyjne uwierzytelnianie firmy Microsoft, dostępne dla wszystkich usług Azure SQL i SQL Server 2022 (16.x) i nowszych, umożliwia uwierzytelnianie przy użyciu interakcyjnego okna dialogowego, które obsługuje również uwierzytelnianie wieloskładnikowe.

    Uwierzytelnianie interakcyjne firmy Microsoft Entra wymaga programu bcpw wersji 15.0.1000.34 lub nowszej oraz odBC w wersji 17.2 lub nowszej.

    Aby włączyć uwierzytelnianie interakcyjne, podaj opcję -G tylko z nazwą użytkownika (-U) i bez hasła.

    W poniższym przykładzie dane są eksportowane przy użyciu uwierzytelniania interakcyjnego firmy Microsoft, w tym określania nazwy użytkownika konta Microsoft Entra.

    Tryb interaktywny wymaga ręcznego wprowadzenia hasła lub dla kont z włączonym uwierzytelnianiem wieloskładnikowym należy ukończyć skonfigurowaną metodę uwierzytelniania wieloskładnikowego.

    bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com
    

    Jeśli używasz użytkownika Microsoft Entra, który jest kontem systemu Windows z domeny federacyjnej, nazwa użytkownika wprowadzona w wierszu polecenia musi zawierać swoją domenę (na przykład joe@contoso.com):

    bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U joe@contoso.com
    

    Jeśli użytkownicy gościnni istnieją w określonej dzierżawie Microsoft Entra i są częścią grupy obecnej w bazie danych Azure SQL Database, która ma uprawnienia do wykonywania polecenia bcp, wtedy używany jest ich alias użytkownika gościnnego (na przykład keith0@adventure-works.com).

-h "wskazówki [, ... n]"

Dotyczy: tylko dla Windows. Nieobsługiwane w systemach Linux i macOS.

Określa wskazówkę lub wskazówki, które mają być używane podczas zbiorczego importowania danych do tabeli lub widoku.

  • ORDER (kolumna [ASC | DESC] [, ... n])

    Kolejność sortowania danych w pliku danych. Wydajność importowania zbiorczego jest lepsza, jeśli importowane dane są sortowane zgodnie z indeksem klastrowanym w tabeli, jeśli istnieją. Jeśli plik danych jest sortowany w innej kolejności, oznacza to, że inny niż kolejność klastrowanego klucza indeksu lub jeśli w tabeli nie ma indeksu klastrowanego, klauzula ORDER jest ignorowana. Podane nazwy kolumn muszą być prawidłowymi nazwami kolumn w tabeli docelowej. Domyślnie narzędzie bcp zakłada, że plik danych jest nieurządkowany. W przypadku zoptymalizowanego importu zbiorczego program SQL Server sprawdza również, czy zaimportowane dane są sortowane.

  • ROWS_PER_BATCH = bb

    Liczba wierszy danych na partię (jako bb). Używany, gdy -b nie jest określony, co powoduje wysłanie całego pliku danych do serwera jako pojedynczej transakcji. Serwer optymalizuje ładunek zbiorczy zgodnie z wartością bb. Domyślnie ROWS_PER_BATCH jest nieznany.

  • KILOBYTES_PER_BATCH = cc

    Przybliżona liczba kilobajtów danych na partię (jako cc). Domyślnie KILOBYTES_PER_BATCH jest nieznany.

  • TABLOCK

    Określa, że blokada na poziomie tabeli aktualizacji zbiorczej jest uzyskiwana podczas operacji ładowania zbiorczego; w przeciwnym razie uzyskuje się blokadę na poziomie wiersza. Ta wskazówka znacznie poprawia wydajność, ponieważ utrzymywanie blokady podczas operacji kopiowania zbiorczego zmniejsza rywalizację o blokadę w tabeli. Tabelę można załadować współbieżnie z wielu klientów, jeśli tabela nie ma indeksów i TABLOCK jest określona. Domyślnie zachowanie blokowania jest określane przez opcję table lock on bulkload tabeli. Aby uzyskać więcej informacji, zobacz sp_tableoption.

    Uwaga

    Jeśli tabela docelowa jest indeksem klastrowanego indeksu kolumnowego, wskazówka TABLOCK nie jest wymagana do ładowania przez wielu równoczesnych klientów, ponieważ każdemu współbieżnemu wątkowi przypisana jest oddzielna grupa wierszy w indeksie i ładuje do niej dane. Aby uzyskać więcej informacji, zobacz Indeksy Columnstore: omówienie.

  • SPRAWDZANIE_OGRANICZEŃ

    Określa, że wszystkie ograniczenia w tabeli docelowej lub widoku muszą być sprawdzane podczas operacji importowania zbiorczego. CHECK_CONSTRAINTS Bez wskazówki żadne CHECKograniczenia i i FOREIGN KEY są ignorowane, a po operacji ograniczenie w tabeli jest oznaczone jako niezauważone.

    Uwaga

    UNIQUE, PRIMARY KEYi NOT NULL ograniczenia są zawsze wymuszane.

    W pewnym momencie należy sprawdzić ograniczenia dotyczące całej tabeli. Jeśli tabela nie była pusta przed operacją importowania zbiorczego, koszt ponownego przetestowania konstraintów może przekroczyć koszt stosowania CHECK konstraintów do danych przyrostowych. W związku z tym zaleca się, aby zwykle włączać sprawdzanie ograniczeń podczas przyrostowego importu zbiorczego.

    Sytuacja, w której mogą być wyłączone ograniczenia (zachowanie domyślne), to jeśli dane wejściowe zawierają wiersze naruszające ograniczenia. Przy CHECK wyłączonych ograniczeniach można zaimportować dane, a następnie użyć instrukcji Transact-SQL, aby usunąć dane, które nie są prawidłowe.

    Narzędzie bcp wymusza teraz sprawdzanie poprawności danych i sprawdzanie danych, które mogą powodować niepowodzenie skryptów, jeśli są wykonywane na nieprawidłowych danych w pliku danych.

    Uwaga

    Przełącznik -mmax_errors nie ma zastosowania do sprawdzania ograniczeń.

  • WYZWALACZE_OGNIA

    Po określeniu tej opcji z argumentem in wszystkie wyzwalacze wstawiania zdefiniowane w tabeli docelowej są uruchamiane podczas operacji kopiowania zbiorczego. Jeśli FIRE_TRIGGERS nie zostanie określony, nie zostaną uruchomione wyzwalacze wstawiania. FIRE_TRIGGERS jest ignorowane dla argumentów out, queryout i format.

-i input_file

Dotyczy: tylko dla Windows. Nieobsługiwane w systemach Linux i macOS.

Określa nazwę pliku odpowiedzi zawierającego odpowiedzi na pytania wiersza polecenia dla każdego pola danych, gdy jest wykonywana kopia zbiorcza przy użyciu trybu interaktywnego (-n, -c, -wlub -N nie określono).

Jeśli input_file zaczyna się od łącznika (-) lub ukośnika (/), nie umieszczaj spacji między -i a wartością input_file.

-k

Określa, że puste kolumny powinny zachować wartość null podczas operacji, a nie mieć żadnych wartości domyślnych dla wstawionych kolumn. Aby uzyskać więcej informacji, zobacz Zachowywanie wartości null lub wartości domyślnych podczas importowania zbiorczego (SQL Server).

-K zamiar_aplikacji

Deklaruje typ obciążenia aplikacji podczas nawiązywania połączenia z serwerem. Jedyną wartością, która jest możliwa, jest ReadOnly. Jeśli -K nie zostanie określony, narzędzie bcp nie obsługuje łączności z repliką wtórną w grupie dostępności Always On. Aby uzyskać więcej informacji, zobacz Odciążanie obciążenia tylko do odczytu do pomocniczej repliki zawsze włączonej grupy dostępności.

-l login_timeout

Określa limit czasu logowania. Opcja -l określa liczbę sekund przed upływem limitu czasu logowania do programu SQL Server podczas próby nawiązania połączenia z serwerem. Domyślny limit czasu logowania wynosi 15 sekund. Limit czasu logowania musi być liczbą z zakresu od 0 do 65534. Jeśli podana wartość nie jest liczbowa lub nie mieści się w tym zakresie, narzędzie bcp generuje komunikat o błędzie. Wartość 0 określa nieskończony limit czasu.

-L ostatni_wiersz

Określa liczbę ostatniego wiersza do wyeksportowania z tabeli lub zaimportowania z pliku danych. Ten parametr wymaga wartości większej niż (>) 0, ale mniejszej niż (<) lub równej (=) liczbie ostatniego wiersza. W przypadku braku tego parametru wartość domyślna to ostatni wiersz pliku.

last_row może być dodatnią liczbą całkowitą o wartości do 2^63-1.

-m max_errors

Określa maksymalną liczbę błędów składniowych, które mogą wystąpić przed anulowaniem operacji narzędzia bcp . Błąd składni oznacza błąd konwersji danych do docelowego typu danych. Suma max_errors wyklucza wszelkie błędy, które można wykryć tylko na serwerze, takie jak naruszenia ograniczeń.

Wiersz, którego nie można skopiować przy użyciu narzędzia bcp, jest ignorowany i jest liczony jako jeden błąd. Jeśli ta opcja nie jest dołączona, wartość domyślna to 10.

Uwaga

Opcja -m nie ma również zastosowania do konwertowania typów danych money lub bigint .

-n

Wykonuje operację kopiowania zbiorczego przy użyciu natywnych (baz danych) typów danych. Ta opcja nie monitoruje każdego pola; używa wartości domyślnych.

Aby uzyskać więcej informacji, zobacz Używanie formatu natywnego do importowania lub eksportowania danych (SQL Server).

-N

Dotyczy: tylko dla Windows. Nieobsługiwane w systemach Linux i macOS.

Wykonuje operację kopiowania zbiorczego przy użyciu natywnych typów danych (bazy danych) dla danych nieznakowych i znaków Unicode dla danych tekstowych. Ta opcja oferuje wyższą wydajność alternatywną dla -w opcji i jest przeznaczona do przesyłania danych z jednego wystąpienia programu SQL Server do innego przy użyciu pliku danych. Nie wyświetla monitu dla każdego pola. Użyj tej opcji podczas przesyłania danych zawierających znaki rozszerzone ANSI i chcesz korzystać z wydajności trybu natywnego.

Aby uzyskać więcej informacji, zobacz Używanie formatu natywnego Unicode do importowania lub eksportowania danych (SQL Server).

Jeśli eksportujesz, a następnie importujesz dane do tego samego schematu tabeli przy użyciu narzędzia bcp z -N, może zostać wyświetlone ostrzeżenie o obcięciu, jeśli istnieje kolumna znakowa o stałej długości i nieobsługująca Unicode (na przykład char(10)).

Ostrzeżenie można zignorować. Jednym ze sposobów rozwiązania tego ostrzeżenia jest użycie polecenia -n zamiast -N.

-o plik_wyjściowy

Dotyczy: tylko dla Windows. Nieobsługiwane w systemach Linux i macOS.

Określa nazwę pliku, który odbiera dane wyjściowe przekierowane z wiersza polecenia.

Jeśli output_file zaczyna się od łącznika (-) lub ukośnika (/), nie dołączaj spacji między -o a wartością output_file.

-P hasło

Określa hasło identyfikatora logowania. Jeśli ta opcja nie jest używana, polecenie bcp wyświetla monit o hasło. Jeśli ta opcja jest używana na końcu wiersza polecenia bez hasła, narzędzie bcp używa hasła domyślnego (NULL).

Ważne

Nie używaj pustego hasła. Użyj silnego hasła.

Aby zamaskować hasło, nie należy określać -P opcji wraz z opcją -U . Zamiast tego, po określeniu bcp wraz z opcją -U i innymi przełącznikami (nie określaj -P), naciśnij klawisz Enter, a polecenie wyświetli monit o podanie hasła. Ta metoda gwarantuje, że hasło jest maskowane po wprowadzeniu.

Jeśli hasło zaczyna się od łącznika (-) lub ukośnika (/), nie dodawaj spacji między -Pwartością hasła.

-q

Wykonuje instrukcję SET QUOTED_IDENTIFIER ON w połączeniu między narzędziem bcp i wystąpieniem programu SQL Server. Użyj tej opcji, aby określić bazę danych, właściciela, tabelę lub nazwę widoku zawierającą spację lub pojedynczy cudzysłów. Ujęć całą trójczęściową tabelę lub nazwę widoku w cudzysłów ("").

Aby określić nazwę bazy danych zawierającą spację lub pojedynczy cudzysłów, należy użyć -q opcji .

-q nie ma zastosowania do wartości przekazanych do -d.

Aby uzyskać więcej informacji, zobacz sekcję Uwagi w tym artykule.

- r row_term

Określa rozdzielnik wierszy. Wartość domyślna to \n (znak nowego wiersza). Użyj tego parametru, aby zastąpić domyślny terminator wierszy. Aby uzyskać więcej informacji, zobacz Określanie terminatorów pól i wierszy (SQL Server).

Jeśli określisz terminator wierszy w notacji szesnastkowej w poleceniu bcp , wartość zostanie obcięta na 0x00. Jeśli na przykład określisz 0x410041, zostanie użyte 0x41.

Jeśli row_term zaczyna się od łącznika (-) lub ukośnika (/), nie dołączaj spacji między -r a wartością row_term.

-R

Określa, że dane waluty, daty i godziny są zbiorczo kopiowane do programu SQL Server przy użyciu formatu regionalnego zdefiniowanego dla ustawień regionalnych komputera klienckiego. Domyślnie ustawienia regionalne są ignorowane.

-S [server_name[\instance_name]]

Określa nazwę wystąpienia programu SQL Server, do którego ma nawiązać połączenie, lub jeśli używany jest -D, nazwę DSN.

Jeśli serwer nie zostanie określony, narzędzie bcp łączy się z domyślnym wystąpieniem programu SQL Server na komputerze lokalnym. Ta opcja jest wymagana, gdy polecenie bcp jest uruchamiane z zdalnego komputera w sieci lub z lokalnej nazwanej instancji. Aby nawiązać połączenie z domyślnym wystąpieniem programu SQL Server na serwerze, wystarczy określić server_name. Aby nawiązać połączenie z nazwanym wystąpieniem programu SQL Server, podaj server_name**\**instance_name.

-t field_term

Określa lub definiuje terminator dla pola. Wartość domyślna to \t (znak tabulacji). Użyj tego parametru, aby zastąpić domyślny terminator pola. Aby uzyskać więcej informacji, zobacz Określanie terminatorów pól i wierszy (SQL Server).

Jeśli określisz terminator pola w notacji szesnastkowej w poleceniu bcp , wartość zostanie obcięta na 0x00. Jeśli na przykład określisz 0x410041, zostanie użyte 0x41.

Jeśli field_term zaczyna się od łącznika (-) lub ukośnika (/), nie dołączaj spacji między -t a wartością field_term.

-T

Określa, że narzędzie bcp łączy się z serwerem SQL Server za pomocą uwierzytelnionego połączenia przy użyciu zintegrowanych zabezpieczeń. Poświadczenia zabezpieczeń użytkownika sieciowego, login_id i hasła nie są wymagane. Jeśli -T nie zostanie określony, musisz określić -U i -P, aby pomyślnie nawiązać połączenie.

Ważne

Gdy narzędzie bcp łączy się z programem SQL Server z zaufanym połączeniem przy użyciu zintegrowanych zabezpieczeń, użyj -T opcji (zaufane połączenie) zamiast kombinacji nazwy użytkownika i hasła . Gdy narzędzie bcp łączy się z usługą SQL Database lub Azure Synapse Analytics, użycie uwierzytelniania systemu Windows lub uwierzytelniania microsoft Entra nie jest obsługiwane. Użyj opcji -U i -P .

-U identyfikator_logowania

Określa identyfikator logowania używany do połączenia z serwerem SQL.

-u

Dotyczy:bcp w wersji 18 lub nowszej.

Certyfikat serwera zaufania. W przypadku użycia z opcją Szyfruj dla połączenia umożliwia szyfrowanie przy użyciu certyfikatu serwera z podpisem własnym.

-v

Raportuje numer wersji narzędzia bcp i prawa autorskie.

-V { 80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170 }

Dotyczy: tylko dla Windows. Nieobsługiwane w systemach Linux i macOS.

Wykonuje operację kopiowania zbiorczego przy użyciu typów danych z wcześniejszej wersji programu SQL Server. Ta opcja nie prosi o ustawienia dla każdego pola; korzysta z wartości domyślnie ustawionych.

  • 80 = SQL Server 2000 (8.x)
  • 90 = SQL Server 2005 (9.x)
  • 100 = SQL Server 2008 (10.0.x) i SQL Server 2008 R2 (10.50.x)
  • 110 = SQL Server 2012 (11.x)
  • 120 = SQL Server 2014 (12.x)
  • 130 = SQL Server 2016 (13.x)
  • 140 = SQL Server 2017 (14.x)
  • 150 = SQL Server 2019 (15.x)
  • 160 = SQL Server 2022 (16.x)
  • 170 = SQL Server 2025 (17.x) Wersja zapoznawcza

Na przykład aby wygenerować dane dla typów nieobsługiwanych przez program SQL Server 2000 (8.x), ale zostały wprowadzone w nowszych wersjach programu SQL Server, użyj -V80 opcji .

Aby uzyskać więcej informacji, zobacz Importowanie danych w formacie natywnym i znakowym z wcześniejszych wersji SQL Server.

-w

Wykonuje operację kopiowania zbiorczego przy użyciu znaków Unicode. Ta opcja nie wyświetla monitu o każde pole; używa nchar jako typ magazynowania, bez prefiksów, \t (znak tabulacji) jako separatora pola i \n (znak nowego wiersza) jako terminatora wiersza. -w nie jest zgodny z elementem -c.

Aby uzyskać więcej informacji, zobacz Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu znaków Unicode.

-x

Dotyczy: tylko dla Windows. Nieobsługiwane w systemach Linux i macOS.

Ta opcja jest używana z opcjami format i -f i generuje plik formatu XML zamiast domyślnego pliku formatu innego niż XML. Element -x nie działa podczas importowania ani eksportowania danych. Generuje błąd, jeśli jest używany bez zarówno format jak i -fformat_file.

-Y[s|m|o]

Dotyczy:bcp w wersji 18 lub nowszej.

Określa, czy połączenia używają szyfrowania TLS za pośrednictwem sieci. -Y może być o (dla optional), m (dla mandatory, wartością domyślną) lub s (dla strict). Jeśli nie dołączysz -Y, -Ym (dla mandatory) jest wartością domyślną.

Uwagi

  • Klient bcp 13.0 jest instalowany podczas instalowania narzędzi programu Microsoft SQL Server 2019 (15.x). Jeśli narzędzia są instalowane dla wielu wersji programu SQL Server, w zależności od kolejności wartości PATH zmiennej środowiskowej, może być używany wcześniejszy klient bcp zamiast klienta bcp 13.0. Ta zmienna środowiskowa definiuje zestaw katalogów używanych przez system Windows do wyszukiwania plików wykonywalnych. Aby dowiedzieć się, której wersji używasz, uruchom bcp -v polecenie w wierszu polecenia systemu Windows. Aby uzyskać informacje o sposobie ustawiania ścieżki polecenia w zmiennej PATH środowiskowej, zobacz Zmienne środowiskowe lub wyszukaj zmienne środowiskowe w Pomocy systemu Windows.

    Aby upewnić się, że jest uruchomiona najnowsza wersja narzędzia bcp , należy usunąć wszystkie starsze wersje narzędzia bcp .

    Aby określić, gdzie są zainstalowane wszystkie wersje narzędzia bcp , wpisz w wierszu polecenia:

    where bcp.exe
    
  • Narzędzie bcp można również pobrać oddzielnie z pakietu Microsoft SQL Server 2016 Feature Pack. Wybierz wartość ENU\x64\MsSqlCmdLnUtils.msi lub ENU\x86\MsSqlCmdLnUtils.msi.

  • Pliki formatu XML są obsługiwane tylko wtedy, gdy narzędzia programu SQL Server są instalowane razem z klientem natywnym programu SQL Server.

  • Aby uzyskać informacje o tym, gdzie znaleźć lub jak uruchomić narzędzie bcp i o konwencji składni narzędzi wiersza polecenia, zobacz Narzędzia wiersza polecenia SQL (aparat bazy danych).

  • Aby uzyskać informacje na temat przygotowywania danych do operacji importowania lub eksportowania zbiorczego, zobacz Przygotowywanie danych do eksportu lub importu zbiorczego.

  • Aby uzyskać informacje o tym, kiedy operacje wstawiania wierszy wykonywane przez importowanie zbiorcze są rejestrowane w dzienniku transakcji, zobacz Wymagania wstępne dotyczące minimalnego rejestrowania w importowaniu zbiorczym.

  • Używanie dodatkowych znaków specjalnych

    Znaki <, >, |, & i ^ są specjalnymi znakami powłoki poleceń i muszą być poprzedzone znakiem unikowym (^) lub ujęte w znaki cudzysłowu w przypadku użycia w łańcuchu znaków (na przykład "StringContaining&Symbol"). Jeśli używasz cudzysłowów do ujęć ciąg zawierający jeden z znaków specjalnych, znaki cudzysłowu są ustawiane jako część wartości zmiennej środowiskowej.

Natywna obsługa plików danych

W programie SQL Server narzędzie bcp obsługuje natywne pliki danych zgodne z wersjami programu SQL Server, począwszy od programu SQL Server 2000 (8.x) i nowszych.

Obliczone kolumny i kolumny sygnatury czasowej

Wartości w pliku danych importowanym dla kolumn obliczeniowych lub sygnatur czasowych są ignorowane, a program SQL Server automatycznie przypisuje wartości. Jeśli plik danych nie zawiera wartości kolumn obliczonych lub sygnatur czasowych w tabeli, użyj pliku formatu, aby określić, że kolumny obliczone lub sygnatury czasowej w tabeli powinny zostać pominięte podczas importowania danych; Program SQL Server automatycznie przypisuje wartości dla kolumny.

Kolumny obliczone i kolumny typu 'timestamp' są zbiorczo kopiowane z serwera SQL Server do pliku danych w zwykły sposób.

Określanie identyfikatorów zawierających spacje lub znaki cudzysłowu

Identyfikatory programu SQL Server mogą zawierać znaki, takie jak osadzone spacje i znaki cudzysłowu. Takie identyfikatory muszą być traktowane w następujący sposób:

  • Po określeniu identyfikatora lub nazwy pliku zawierającego spację lub cudzysłów w wierszu polecenia należy ująć identyfikator w cudzysłów ("").

    Na przykład następujące bcp out polecenie tworzy plik danych o nazwie Currency Types.dat:

    bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -c
    
  • Aby określić nazwę bazy danych zawierającą spację lub cudzysłów, należy użyć -q opcji .

  • W przypadku nazw właścicieli, tabel lub widoków zawierających osadzone spacje lub znaki cudzysłowu można wykonać następujące czynności:

    • Określ -q opcję lub

    • Umieść nazwę właściciela, tabeli lub widoku w nawiasach kwadratowych ([]) wewnątrz cudzysłowów.

Walidacja danych

Narzędzie bcp wymusza teraz sprawdzanie poprawności danych i sprawdzanie danych, które mogą powodować niepowodzenie skryptów, jeśli są wykonywane na nieprawidłowych danych w pliku danych. Na przykład narzędzie bcp sprawdza teraz, czy:

  • Natywne reprezentacje typów danych zmiennoprzecinkowych lub realnych są prawidłowe.

  • Dane Unicode mają długość parzystową.

Nie można teraz załadować formularzy nieprawidłowych danych, które mogą być importowane zbiorczo we wcześniejszych wersjach programu SQL Server; mając na uwadze, że we wcześniejszych wersjach błąd nie wystąpił, dopóki klient nie próbował uzyskać dostępu do nieprawidłowych danych. Dodana walidacja minimalizuje niespodzianki podczas wykonywania zapytań dotyczących danych po zbiorczym załadowaniu.

Zbiorcze eksportowanie lub importowanie dokumentów SQLXML

Aby zbiorczo wyeksportować lub zaimportować dane SQLXML, użyj jednego z następujących typów danych w pliku formatu.

Typ danych Efekt
SQLCHAR lub SQLVARYCHAR Dane są wysyłane na stronie kodu klienta lub na stronie kodowej implikowanej przez sortowanie). Efekt jest taki sam jak określanie przełącznika -c bez określania pliku formatu.
SQLNCHAR lub SQLNVARCHAR Dane są wysyłane jako Unicode. Efekt jest taki sam jak określanie przełącznika -w bez określania pliku formatu.
SQLBINARY lub SQLVARYBIN Dane są wysyłane bez żadnej konwersji.

Uprawnienia

Operacja bcp out wymaga uprawnień SELECT do tabeli źródłowej.

bcp in Operacja minimalnie wymaga SELECT/INSERT uprawnień w tabeli docelowej. Ponadto uprawnienia są wymagane, ALTER TABLE jeśli którekolwiek z następujących warunków są spełnione:

  • Ograniczenia istnieją, a CHECK_CONSTRAINTS wskazówka nie jest określona.

    Wyłączenie ograniczeń jest zachowaniem domyślnym. Aby włączyć ograniczenia jawnie, użyj opcji -h z podpowiedzią CHECK_CONSTRAINTS.

  • Wyzwalacze istnieją, a FIRE_TRIGGER wskazówka nie jest określona.

    Domyślnie wyzwalacze nie są wyzwalane. Aby jawnie uruchamiać wyzwalacze, użyj -h opcji z wskazówką FIRE_TRIGGERS .

  • Możesz użyć opcji importowania -E wartości tożsamości z pliku danych.

Uwaga

Wymaganie ALTER TABLE uprawnień do tabeli docelowej zostało wprowadzone w programie SQL Server 2005 (9.x). To wymaganie może spowodować niepowodzenie skryptów bcp , które nie wymuszają wyzwalaczy i kontroli ograniczeń, jeśli konto użytkownika nie ma ALTER TABLE uprawnień do tabeli docelowej.

Najlepsze rozwiązania dotyczące trybu znaków (-c) i trybu natywnego (-n)

Ta sekcja zawiera zalecenia dotyczące trybu znaków (-c) i trybu natywnego (-n).

  • (Administrator/Użytkownik) Jeśli to możliwe, użyj formatu natywnego (-n), aby uniknąć problemu z separatorem. Użyj formatu natywnego, aby wyeksportować i zaimportować przy użyciu programu SQL Server. Wyeksportuj dane z programu SQL Server przy użyciu -c opcji lub -w , jeśli dane zostaną zaimportowane do bazy danych innej niż SQL Server.

  • (Administrator) Zweryfikuj dane podczas używania bcp out. Jeśli na przykład używasz wartości bcp out, bcp in, a następnie bcp out sprawdź, czy dane są prawidłowo eksportowane, a wartości terminatora nie są używane jako część niektórych wartości danych. Rozważ zastąpienie domyślnych terminatorów (przy użyciu opcji -t i -r) na losowe wartości szesnastkowe, aby uniknąć konfliktów między wartościami terminatora a wartościami danych.

  • (Użytkownik) Użyj długiego i unikatowego terminatora (dowolnej sekwencji bajtów lub znaków), aby zminimalizować prawdopodobieństwo konfliktu z rzeczywistą wartością ciągu. Można to zrobić przy użyciu opcji -t i -r .

Przykłady

Przykłady w tej sekcji korzystają z przykładowej WideWorldImporters bazy danych dla programu SQL Server 2016 (13.x) i nowszych wersji, usługi Azure SQL Database i usługi Azure SQL Managed Instance. WideWorldImporters można pobrać z witryny https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Zobacz składnię instrukcji RESTORE dotyczącą przywracania przykładowej bazy danych.

Przykładowe warunki testu

O ile nie określono inaczej, przykłady zakładają, że używasz uwierzytelniania systemu Windows i masz zaufane połączenie z wystąpieniem serwera, w którym uruchamiasz polecenie bcp. Katalog o nazwie D:\bcp jest używany w wielu przykładach.

Poniższy skrypt Transact-SQL tworzy pustą kopię WideWorldImporters.Warehouse.StockItemTransactions tabeli, a następnie dodaje ograniczenie klucza podstawowego:

USE WideWorldImporters;
GO

SET NOCOUNT ON;

IF NOT EXISTS (SELECT *
               FROM sys.tables
               WHERE name = 'Warehouse.StockItemTransactions_bcp')
    BEGIN
        SELECT *
        INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
        FROM WideWorldImporters.Warehouse.StockItemTransactions
        WHERE 1 = 2;

        ALTER TABLE Warehouse.StockItemTransactions_bcp
        ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
            PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
    END

W razie potrzeby możesz obcinać tabelę StockItemTransactions_bcp :

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

Odp. Identyfikowanie wersji narzędzia bcp

W wierszu polecenia wprowadź następujące polecenie:

bcp -v

B. Kopiowanie wierszy tabeli do pliku danych (z zaufanym połączeniem)

Poniższe przykłady ilustrują opcję out na tabeli WideWorldImporters.Warehouse.StockItemTransactions.

  • Podstawowa

    W tym przykładzie tworzony jest plik danych o nazwie StockItemTransactions_character.bcp, a dane tabeli kopiowane są do niego przy użyciu formatu znakowego.

    W wierszu polecenia wprowadź następujące polecenie:

    bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Rozszerzony

    W tym przykładzie tworzony jest plik danych o nazwie StockItemTransactions_native.bcp i kopiuje do niego dane tabeli przy użyciu formatu natywnego . Przykład: określa również maksymalną liczbę błędów składniowych, plik błędu i plik wyjściowy.

    W wierszu polecenia wprowadź następujące polecenie:

    bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S -T
    

Przejrzyj Error_out.log i Output_out.log. Error_out.log powinna być pusta. Porównaj rozmiary plików między StockItemTransactions_character.bcp i StockItemTransactions_native.bcp.

C. Kopiowanie wierszy tabeli do pliku danych (z uwierzytelnianiem w trybie mieszanym)

Poniższy przykład ilustruje out opcję na WideWorldImporters.Warehouse.StockItemTransactions tabeli. W tym przykładzie tworzony jest plik danych o nazwie StockItemTransactions_character.bcp, a dane tabeli kopiowane są do niego przy użyciu formatu znakowego.

W przykładzie przyjęto założenie, że używasz uwierzytelniania w trybie mieszanym i musisz użyć przełącznika -U w celu określenia identyfikatora logowania. Ponadto, chyba że nawiązujesz połączenie z domyślnym wystąpieniem programu SQL Server na komputerze lokalnym, użyj przełącznika -S , aby określić nazwę systemu i opcjonalnie nazwę wystąpienia.

W wierszu polecenia wprowadź następujące polecenie: (system wyświetla monit o hasło).

bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>

D. Kopiowanie danych z pliku do tabeli

Poniższe przykłady ilustrują opcję in w tabeli WideWorldImporters.Warehouse.StockItemTransactions_bcp z wykorzystaniem wcześniej utworzonych plików.

  • Podstawowa

    W tym przykładzie użyto wcześniej utworzonego StockItemTransactions_character.bcp pliku danych.

    W wierszu polecenia wprowadź następujące polecenie:

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Rozszerzony

    W tym przykładzie użyto wcześniej utworzonego StockItemTransactions_native.bcp pliku danych. Przykład: użyj wskazówki TABLOCK, określa rozmiar partii, maksymalną liczbę błędów składniowych, plik błędu i plik wyjściowy.

    W wierszu polecenia wprowadź następujące polecenie:

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S -T
    

    Przejrzyj Error_in.log i Output_in.log.

E. Kopiowanie określonej kolumny do pliku danych

Aby skopiować określoną kolumnę, możesz użyć queryout opcji . Poniższy przykład kopiuje tylko kolumnę StockItemTransactionIDWarehouse.StockItemTransactions tabeli do pliku danych.

W wierszu polecenia wprowadź następujące polecenie:

bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T

F. Kopiowanie określonego wiersza do pliku danych

Aby skopiować określony wiersz, możesz użyć queryout opcji . Poniższy przykład kopiuje tylko wiersz osoby o nazwie Amy Trefl z tabeli WideWorldImporters.Application.People do pliku danych Amy_Trefl_c.bcp.

Uwaga

Przełącznik -d służy do identyfikowania bazy danych.

W wierszu polecenia wprowadź następujące polecenie:

bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T

G. Kopiowanie danych z zapytania do pliku danych

Aby skopiować zestaw wyników z instrukcji Transact-SQL do pliku danych, użyj queryout opcji . Poniższy przykład kopiuje nazwy z WideWorldImporters.Application.People tabeli uporządkowane według pełnej People.txt nazwy do pliku danych.

Uwaga

Przełącznik -t służy do tworzenia pliku rozdzielanego przecinkami.

W wierszu polecenia wprowadź następujące polecenie:

bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T

H. Tworzenie plików formatu

Poniższy przykład tworzy trzy różne pliki formatu dla Warehouse.StockItemTransactions tabeli w WideWorldImporters bazie danych. Przejrzyj zawartość każdego utworzonego pliku.

W wierszu polecenia wprowadź następujące polecenia:

REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T

REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T

REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T

Uwaga

Aby użyć przełącznika -x , musisz użyć klienta bcp 9.0. Aby uzyskać informacje o sposobie korzystania z klienta bcp 9.0, zobacz sekcję Uwagi .

Aby uzyskać więcej informacji, zobacz Użyj plików w formacie innym niż XML (SQL Server) i pliki w formacie XML (SQL Server).

Ja. Użycie pliku formatującego do zbiorczego importowania z użyciem bcp

Aby użyć wcześniej utworzonego pliku formatu podczas importowania danych do wystąpienia programu SQL Server, użyj przełącznika -f wraz z opcją in. Na przykład następujące polecenie zbiorczo kopiuje zawartość pliku danych , StockItemTransactions_character.bcpdo kopii Warehouse.StockItemTransactions_bcp tabeli przy użyciu wcześniej utworzonego pliku StockItemTransactions_c.xmlformatu .

Uwaga

Przełącznik -L służy do importowania tylko pierwszych 100 rekordów.

W wierszu polecenia wprowadź następujące polecenie:

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T

Uwaga

Pliki formatu są przydatne, gdy pola pliku danych różnią się od kolumn tabeli; na przykład w ich liczbie, kolejności lub typach danych. Aby uzyskać więcej informacji, zobacz Pliki formatu do importu lub eksportu danych (SQL Server).

J. Określanie strony kodowej

Poniższy fragment kodu przedstawia import bcp podczas określania strony kodowej 65001.

bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...

K. Przykładowy plik wyjściowy korzystający z pól niestandardowych i terminatorów wierszy

W tym przykładzie przedstawiono dwa przykładowe pliki wygenerowane przez narzędzie bcp przy użyciu pól niestandardowych i terminatorów wierszy.

  1. Utwórz tabelę dbo.T1 w tempdb bazie danych z dwiema kolumnami ID i Name.

    USE tempdb;
    GO
    
    CREATE TABLE dbo.T1 (ID INT, [Name] NVARCHAR (20));
    GO
    
    INSERT INTO dbo.T1 VALUES (1, N'Natalia');
    INSERT INTO dbo.T1 VALUES (2, N'Mark');
    INSERT INTO dbo.T1 VALUES (3, N'Randolph');
    GO
    
  2. Wygeneruj plik wyjściowy z przykładowej tabeli dbo.T1przy użyciu niestandardowego terminatora pól.

    W tym przykładzie nazwa serwera to MYSERVER, i -t , określa terminator pola niestandardowego.

    bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t ,
    

    Oto zestaw wyników.

    1,Natalia
    2,Mark
    3,Randolph
    
  3. Wygeneruj plik wyjściowy z przykładowej tabeli dbo.T1przy użyciu niestandardowego terminatora pola i niestandardowego terminatora wierszy.

    W tym przykładzie nazwa serwera to MYSERVER, -t , określa terminator pola niestandardowego i -r : określa niestandardowy terminator wierszy.

    bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t , -r :
    

    Oto zestaw wyników.

    1,Natalia:2,Mark:3,Randolph:
    

    Uwaga

    Znak końca wiersza jest zawsze dodawany, nawet w ostatnim rekordzie. Jednak terminator pola nie jest dodawany do ostatniego pola.

Dodatkowe przykłady

Następujące artykuły zawierają przykłady użycia narzędzia bcp:

Uzyskiwanie pomocy

Współtworzenie dokumentacji SQL

Czy wiesz, że możesz samodzielnie edytować zawartość SQL? Jeśli to zrobisz, nie tylko pomożesz ulepszyć naszą dokumentację, ale także zostaniesz uznany za współautora strony.

Aby uzyskać więcej informacji, zobacz Edytowanie dokumentacji środowiska Microsoft Learn.