Jak używać narzędzia bcp

Dotyczy do:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMagazyn w Microsoft FabricBaza danych SQL w Microsoft Fabric

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

Uwagi

  • Aby uzyskać informacje o tym, gdzie znaleźć lub jak uruchomić bcp narzędzie oraz o konwencjach składni narzędzi wiersza poleceń, zobacz SQL narzędzia wiersza poleceń (Database Engine).

  • 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.

  • Znaki <, >, |, & i ^ są specjalnymi znakami powłoki poleceń i muszą być poprzedzone znakiem ucieczki (^) lub ujęte w cudzysłowach, gdy są używane w łańcuchu (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. Aby uzyskać więcej informacji, zobacz Używanie dodatkowych znaków specjalnych.

  • bcp jest obecnie dostępna w wersji zapoznawczej w usłudze Warehouse w Microsoft Fabric.

  • bcpNie można zaimportować danych w punkcie końcowym analizy SQL w Microsoft Fabric.

Natywna obsługa plików danych

W programie SQL Server narzędzie bcp obsługuje natywne pliki danych zgodne z wersjami programu SQL Server od programu SQL Server 2000 (8.x) wzwyż.

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 AdventureWorks2025.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

bcp Teraz wymusza walidację danych i kontrole danych, które mogą powodować awarię skryptów, jeśli napotkają nieprawidłowe dane w pliku danych. Na przykład bcp teraz sprawdza, czy:

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

  • Dane Unicode mają parzystą długość bajtów.

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.

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 planujesz wyeksportować dane 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 kodu opisane w tym artykule wykorzystują zarówno bazy AdventureWorks2025 danych, jak i WideWorldImporters przykładowe. Aby uzyskać więcej informacji, zobacz:

Aby uzyskać składnię przywracającą przykładowe bazy danych, zobacz RESTORE.

Przykładowe warunki testu

Chyba że zaznaczenie jest inaczej, przykłady zakładają, że używasz uwierzytelniania Windows i masz zaufane połączenie z instancją serwera, na której uruchamiasz bcp polecenie. Wiele przykładów używa katalogu o nazwie D:\bcp. Zastąp <server_name> i innymi wartościami zastępczymi wartościami dla danego środowiska.

Note

Przykłady łączące się z Azure SQL Database wykorzystują uwierzytelnianie Microsoft Entra (-G). Aby uzyskać więcej informacji, zobacz Uwierzytelnianie za pomocą identyfikatora Entra firmy Microsoft w narzędziu bcp.

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 przedstawiają opcję out w tabeli WideWorldImporters.Warehouse.StockItemTransactions.

  • Basic

    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
    
  • Expanded

    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 <server_name> -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 pokazuje opcję out w tabeli WideWorldImporters.Warehouse.StockItemTransactions. 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 pokazują opcję in w tabeli WideWorldImporters.Warehouse.StockItemTransactions_bcp przy użyciu plików utworzonych wcześniej.

  • Basic

    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
    
  • Expanded

    W tym przykładzie użyto wcześniej utworzonego StockItemTransactions_native.bcp pliku danych. W przykładzie TABLOCK użyto również wskazówki i określono 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 <server_name> -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.

Note

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.

Note

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

Note

Przełącznik -x jest obsługiwany tylko w systemie Windows.

Aby uzyskać więcej informacji, zapoznaj się z Plikami w formacie innym niż XML (SQL Server) i Plikami w formacie XML (SQL Server).

I. 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 .

Note

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

Note

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 częściowy przykład kodu pokazuje importowanie 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

Ten przykład przedstawia dwa przykładowe pliki wygenerowane za pomocą bcp przy użyciu niestandardowych terminatorów pól i 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 -t , określa terminator pola niestandardowego. Zastąp <server_name> wartością odpowiednią dla twojego środowiska.

    bcp dbo.T1 out T1.txt -T -S <server_name> -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 -t , określa terminator pola niestandardowego i -r : określa niestandardowy terminator wierszy. Zastąp <server_name> wartością odpowiednią dla twojego środowiska.

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

    Oto zestaw wyników.

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

    Note

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

L. Skopiuj wiersze tabeli do pliku danych (Azure SQL Database)

Poniższy przykład pokazuje opcję out w tabeli SalesLT.Customer w przykładowej bazie danych AdventureWorksLT na platformie Azure SQL Database. W tym przykładzie tworzony jest plik danych o nazwie Customer.bcp, a dane tabeli kopiowane są do niego przy użyciu formatu znakowego. Zastąp <server_name> wartością odpowiednią dla twojego środowiska.

Note

Przełącznik -G umożliwia uwierzytelnianie Microsoft Entra. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie za pomocą identyfikatora Entra firmy Microsoft w narzędziu bcp.

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

bcp SalesLT.Customer out D:\bcp\Customer.bcp -c -S <server_name>.database.windows.net -d AdventureWorksLT -G

M. Kopiuj dane z pliku do tabeli (Azure SQL Database)

Poniższy przykład pokazuje użycie opcji in w tabeli SalesLT.Customer w usłudze Azure SQL Database przy użyciu utworzonego wcześniej pliku danych Customer.bcp. Zastąp <server_name> wartością odpowiednią dla twojego środowiska.

Note

Przełącznik -E zachowuje wartości tożsamości z pliku danych.

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

bcp SalesLT.Customer in D:\bcp\Customer.bcp -c -S <server_name>.database.windows.net -d AdventureWorksLT -G -E

N. Skopiuj dane z zapytania do pliku danych (Azure SQL Database)

Aby skopiować zestaw wyników z Transact-SQL do pliku danych na Azure SQL Database, użyj opcjiqueryout. Poniższy przykład kopiuje nazwy klientów z tabeli SalesLT.Customer w AdventureWorksLT bazie danych do Customer_A.txt pliku danych. Zastąp <server_name> wartością odpowiednią dla twojego środowiska.

Note

Użyj przełącznika -t , aby utworzyć plik oddzielony przecinkami.

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

bcp "SELECT CustomerID, FirstName, LastName, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE 'A%'" queryout D:\bcp\Customer_A.txt -t, -c -S <server_name>.database.windows.net -d AdventureWorksLT -G

Dodatkowe przykłady

Poniższe artykuły zawierają przykłady użycia 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.