Jak używać narzędzia bcp

Zastosowanie:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL database in Microsoft Fabric

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

Uwagi

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ą 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 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. Zastąp <server_name> i innymi wartościami zastępczymi wartościami dla danego środowiska.

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.

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

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

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.