So verwenden Sie das bcp-Hilfsprogramm

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsLager in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Das Hilfsprogramm für Massenkopie (bcp) kopiert Daten zwischen einer Instanz von SQL Server und einer Datendatei in einem vom Benutzer angegebenen Format.

Bemerkungen

  • Für Informationen darüber, wo man das Dienstprogramm findet oder wie man es bcp ausführt sowie zu den Syntaxkonventionen der Eingabeaufforderungswerkzeuge, siehe SQL Command-Line Utilities (Datenbank-Engine).

  • Informationen zum Vorbereiten von Daten für Massenimport- oder Massenexportvorgänge finden Sie unter Vorbereiten von Daten für den Massenexport oder -import.

  • Informationen dazu, wann Zeileneinfügevorgänge, die durch den Massenimport ausgeführt werden, im Transaktionsprotokoll protokolliert werden, finden Sie unter Voraussetzungen für die minimale Protokollierung beim Massenimport.

  • Die Zeichen <, >, |, &und ^ sind spezielle Befehlsshellzeichen, und sie müssen dem Escapezeichen (^) vorangestellt sein oder in Anführungszeichen eingeschlossen werden, wenn sie in einer Zeichenfolge verwendet werden (z. B "StringContaining&Symbol". ). Wenn Sie eine Zeichenfolge, die eines der Sonderzeichen enthält, in Anführungszeichen einschließen, werden diese als Teil des Werts der Umgebungsvariable festgelegt. Weitere Informationen finden Sie unter Verwenden zusätzlicher Sonderzeichen.

  • bcpbefindet sich derzeit in der Vorschau in Warehouse in Microsoft Fabric.

  • bcpIn Microsoft Fabric können keine Daten im SQL-Analyseendpunkt importiert werden.

Unterstützung nativer Datendateien

In SQL Server unterstützt das bcp Dienstprogramm native Datendateien, die mit SQL Server-Versionen ab SQL Server 2000 (8.x) und später kompatibel sind.

Berechnete Spalten und Zeitstempelspalten

In der zu importierenden Datendatei enthaltene Werte für berechnete oder timestamp -Spalten werden ignoriert. SQL Server weist Werte automatisch zu. Wenn die Datendatei keine Werte für die berechneten oder timestamp -Spalten der Tabelle enthält, geben Sie mithilfe einer Formatdatei an, dass die berechneten oder timestamp -Spalten beim Importieren von Daten ausgelassen werden sollen. SQL Server weist diesen Spalten automatisch Werte zu.

Berechnete und timestamp -Spalten werden wie gewohnt aus SQL Server in eine Datendatei massenkopiert.

Angeben von Bezeichnern, die Leerzeichen oder Anführungszeichen enthalten

SQL Server -Bezeichner können Zeichen wie z.B. eingebettete Leerzeichen und Anführungszeichen enthalten. Diese Bezeichner müssen folgendermaßen behandelt werden:

  • Wenn Sie an der Eingabeaufforderung einen Bezeichner oder Dateinamen angeben, der ein Leerzeichen oder ein Anführungszeichen enthält, müssen Sie den Bezeichner in Anführungszeichen ("") einschließen.

    Mit dem Befehl bcp out wird beispielsweise die Datendatei Currency Types.daterstellt:

    bcp AdventureWorks2025.Sales.Currency out "Currency Types.dat" -T -c
    
  • Sie müssen die Option -q verwenden, um einen Datenbanknamen anzugeben, der ein Leerzeichen oder Anführungszeichen enthält.

  • Bei Besitzer-, Tabellen- oder Sichtnamen, die eingebettete Leerzeichen oder Anführungszeichen enthalten, ist Folgendes möglich:

    • Geben Sie die Option -q an, oder

    • Einschließen des Besitzer-, Tabellen- oder Sichtnamens in eckige Klammern ([]) innerhalb der Anführungszeichen.

Datenvalidierung

bcp erzwingt nun Datenvalidierung und Datenprüfungen, die dazu führen können, dass Skripte scheitern, wenn sie auf ungültige Daten in einer Datendatei stoßen. Zum Beispiel bcp überprüft jetzt:

  • Die native Darstellung der Datentypen „float“ oder „real“ ist gültig.

  • Unicode-Daten besitzen eine gerade Bytelänge.

Formulare mit ungültigen Daten, die in früheren Versionen von SQL Server noch massenimportiert werden konnten, werden nun möglicherweise nicht mehr geladen. In früheren Versionen trat der Fehler erst auf, wenn ein Client versuchte, auf die ungültigen Daten zuzugreifen. Durch die zusätzliche Überprüfung werden überraschende Ergebnisse beim Abfragen der Daten nach dem Massenladen minimiert.

Massenexport und -import von SQLXML-Dokumenten

Verwenden Sie in der Formatdatei einen der folgenden Datentypen für den Massenexport oder -import von SQLXML-Daten.

Datentyp Auswirkung
SQLCHAR oder SQLVARYCHAR Die Daten werden in der Clientcode-Seite gesendet bzw. in der durch die Sortierung implizierten Codeseite. Der Effekt ist derselbe, als wenn der Schalter -c ohne eine Formatdatei angegeben wird.
SQLNCHAR oder SQLNVARCHAR Die Daten werden im Unicode-Format gesendet. Der Effekt ist derselbe, als wenn der Schalter -w ohne eine Formatdatei angegeben wird.
SQLBINARY oder SQLVARYBIN Die Daten werden ohne Konvertierung gesendet.

Bewährte Methoden für den Zeichenmodus (-c) und den nativen Modus (-n)

Dieser Abschnitt enthält Empfehlungen für den Zeichenmodus (-c) und den nativen Modus (-n).

  • (Administrator/Benutzer) Falls möglich, verwenden Sie das native Format (-n), um das Trennzeichenproblem zu vermeiden. Verwenden Sie das einheitliche Format für Export- und Importvorgänge mit SQL Server. Exportieren Sie Daten aus SQL Server mithilfe der Option -c oder -w, wenn Sie die Daten in eine Datenbank exportieren wollen, die kein SQL Server ist.

  • (Administrierende Person) Überprüfen der Daten bei Verwendung von bcp out. Wenn Sie beispielsweise bcp out, bcp in und dann bcp out verwenden, überprüfen Sie, ob die Daten ordnungsgemäß exportiert werden und die Terminatorwerte nicht als Teil eines Datenwerts verwendet werden. Erwägen Sie, die Standardabschlusszeichen (mithilfe von -t und -r-Optionen) mit zufälligen Hexadezimalwerten zu überschreiben, um Konflikte zwischen Abschlusszeichenwerten und Datenwerten zu vermeiden.

  • (Benutzer) Verwenden Sie ein langes und eindeutiges Abschlusszeichen (eine Byte- oder Zeichensequenz), um die Wahrscheinlichkeit eines Konflikts mit dem tatsächlichen Zeichenfolgenwert zu minimieren. Verwenden Sie dazu die -t-Option und die -r-Option.

Beispiele

Die Codebeispiele in diesem Artikel verwenden sowohl die WideWorldImporters- als auch die AdventureWorks2025-Beispieldatenbank. Weitere Informationen findest du unter:

Für die Syntax zur Wiederherstellung von Beispieldatenbanken siehe RESTORE.

Beispieltestbedingungen

Sofern nicht anders angegeben, gehen die Beispiele davon aus, dass Sie Windows-Authentifizierung verwenden und eine vertrauenswürdige Verbindung zur Serverinstanz haben, auf der Sie den bcp Befehl ausführen. Viele der Beispiele verwenden ein Verzeichnis namens D:\bcp. Ersetzen sie <server_name> und andere Platzhalterwerte durch Werte für Ihre Umgebung.

Hinweis

Beispiele, die mit der Azure SQL-Datenbank verbunden sind, verwenden Microsoft Entra-Authentifizierung (-G). Weitere Informationen finden Sie unter Authenticate with Microsoft Entra ID in bcp.

Das folgende Transact-SQL Skript erstellt eine leere Kopie der WideWorldImporters.Warehouse.StockItemTransactions Tabelle und fügt dann eine Primärschlüsseleinschränkung hinzu:

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

Sie können die StockItemTransactions_bcp-Tabelle bei Bedarf abschneiden:

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

Ein. Identifizieren der Version des Hilfsprogramms bcp

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

bcp -v

B. Kopieren von Tabellenzeilen in eine Datendatei (mit einer vertrauenswürdigen Verbindung)

Die folgenden Beispiele zeigen die out Option auf der WideWorldImporters.Warehouse.StockItemTransactions Tabelle.

  • Grundlegend

    In diesem Beispiel wird die Datendatei StockItemTransactions_character.bcp erstellt, und die Tabellendaten werden mithilfe eines Zeichenformats in die Datendatei kopiert.

    An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

    In diesem Beispiel wird die Datendatei StockItemTransactions_native.bcp erstellt, und die Tabellendaten werden mithilfe des nativen Formats in die Datendatei kopiert. Im Beispiel werden auch die maximale Anzahl von Syntaxfehlern, eine Fehlerdatei und eine Ausgabedatei angegeben.

    An der Eingabeaufforderung geben Sie folgenden Befehl ein:

    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
    

Überprüfen Sie Error_out.log und Output_out.log. Error_out.log sollte leer sein. Vergleichen Sie die Dateigrößen zwischen StockItemTransactions_character.bcp und StockItemTransactions_native.bcp.

C. Kopieren von Tabellenzeilen in eine Datendatei (mit Authentifizierung im gemischten Modus)

Das folgende Beispiel zeigt die out Option in der WideWorldImporters.Warehouse.StockItemTransactions Tabelle. In diesem Beispiel wird die Datendatei StockItemTransactions_character.bcp erstellt, und die Tabellendaten werden mithilfe eines Zeichenformats in die Datendatei kopiert.

Bei diesem Beispiel wird die Authentifizierung im gemischten Modus vorausgesetzt und Sie müssen mithilfe des Schalters -U die Anmelde-ID angeben. Sofern Sie keine Verbindung mit der Standardinstanz von SQL Server auf dem lokalen Computer herstellen, müssen Sie außerdem mit dem Schalter -S den Systemnamen und optional einen Instanznamen angeben.

Geben Sie an der Eingabeaufforderung folgenden Befehl ein: (Das System fordert Sie zur Eingabe des Kennworts auf.)

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

D: Kopieren von Daten aus einer Datei in eine Tabelle

Die folgenden Beispiele zeigen die in Option in der WideWorldImporters.Warehouse.StockItemTransactions_bcp Tabelle mit zuvor erstellten Dateien.

  • Grundlegend

    Dieses Beispiel verwendet die StockItemTransactions_character.bcp -Datendatei, die zuvor erstellt wurde.

    An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

    Dieses Beispiel verwendet die StockItemTransactions_native.bcp -Datendatei, die zuvor erstellt wurde. Das Beispiel verwendet außerdem den TABLOCK Hinweis und gibt die Batchgröße, die maximale Anzahl von Syntaxfehlern, eine Fehlerdatei und eine Ausgabedatei an.

    An der Eingabeaufforderung geben Sie folgenden Befehl ein:

    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
    

    Überprüfen Sie Error_in.log und Output_in.log.

E. Kopieren einer bestimmten Spalte in eine Datendatei

Zum Kopieren einer bestimmten Spalte können Sie die Option queryout verwenden. Im folgenden Beispiel wird nur die StockItemTransactionID -Spalte der Warehouse.StockItemTransactions -Tabelle in eine Datendatei kopiert.

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

F. Kopieren einer bestimmten Zeile in eine Datendatei

Zum Kopieren einer bestimmten Zeile können Sie die Option queryout verwenden. Im folgenden Beispiel wird nur die Zeile für die Person Amy Trefl aus der WideWorldImporters.Application.People-Tabelle in eine Datendatei Amy_Trefl_c.bcp kopiert.

Hinweis

Der -d Schalter wird verwendet, um die Datenbank zu identifizieren.

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

G. Kopieren von Daten aus einer Abfrage in eine Datendatei

Verwenden Sie die Option queryout zum Kopieren des Resultsets einer Transact-SQL-Anweisung in eine Datendatei. Im folgenden Beispiel werden die Namen aus der WideWorldImporters.Application.People -Tabelle nach vollständigem Namen geordnet in die Datendatei People.txt kopiert.

Hinweis

Der Schalter -t wird verwendet, um eine durch Trennzeichen getrennte Datei zu erstellen.

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

H. Erstellen von Formatdateien

In dem folgenden Beispiel werden drei verschiedene Formatdateien für die Warehouse.StockItemTransactions -Tabelle in der WideWorldImporters -Datenbank erstellt. Überprüfen Sie den Inhalt der einzelnen erstellten Dateien.

Geben Sie an der Eingabeaufforderung die folgenden Befehle ein:

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

Hinweis

Der -x Schalter wird nur unter Windows unterstützt.

Weitere Informationen finden Sie unter Verwenden von Nicht-XML-Formatdateien (SQL Server) und XML-Formatdateien(SQL Server).

Ich. Verwenden einer Formatdatei für einen Massenimport mithilfe von bcp

Wenn Sie eine zuvor erstellte Formatdatei zum Importieren von Daten in eine SQL Server-Instanz verwenden möchten, müssen Sie den Schalter -f mit der Option in verwenden. So wird beispielsweise durch den folgenden Befehl der Inhalt der Datendatei StockItemTransactions_character.bcpin eine Kopie der Warehouse.StockItemTransactions_bcp -Tabelle massenkopiert, wobei die zuvor erstellte Formatdatei StockItemTransactions_c.xmlverwendet wird.

Hinweis

Der Schalter -L wird verwendet, um nur die ersten 100 Datensätze zu importieren.

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

Hinweis

Formatdateien erweisen sich besonders dann als nützlich, wenn die Felder in der Datendatei z. B. hinsichtlich Anzahl, Reihenfolge oder Datentypen von den Tabellenspalten abweichen. Weitere Informationen finden Sie unter Formatdateien zum Importieren oder Exportieren von Daten (SQL Server).

J. Angeben einer Codepage

Das folgende teilweise Codebeispiel zeigt den Import mit bcp unter Angabe der Codepage 65001:

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

K. Beispielausgabedatei mit benutzerdefinierten Feld- und Zeilenabschlusszeichen

Dieses Beispiel zeigt zwei Beispieldateien, die mit bcp benutzerdefinierten Feld- und Zeilenterminatoren generiert wurden.

  1. Erstellen Sie eine dbo.T1-Tabelle in der tempdb-Datenbank mit zwei Spalten, ID und 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. Generieren Sie eine Ausgabedatei aus der Beispieltabelle dbo.T1 mithilfe eines benutzerdefinierten Feldabschlusszeichens.

    In diesem Beispiel -t , wird der benutzerdefinierte Feldterminator angegeben. Ersetzen Sie <server_name> durch einen Wert für Ihre Umgebung.

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

    Hier ist das Ergebnis.

    1,Natalia
    2,Mark
    3,Randolph
    
  3. Generieren Sie eine Ausgabedatei aus der Beispieltabelle dbo.T1 mithilfe eines benutzerdefinierten Feld- und Zeilenabschlusszeichens.

    Gibt in diesem Beispiel -t , den benutzerdefinierten Feldterminator an und -r : gibt den benutzerdefinierten Zeilenterminator an. Ersetzen Sie <server_name> durch einen Wert für Ihre Umgebung.

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

    Hier ist das Ergebnis.

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

    Hinweis

    Das Zeilenabschlusszeichen wird immer hinzugefügt, auch der letzten Zeile. Das Feldabschlusszeichen wird jedoch nicht dem letzten Feld hinzugefügt.

L. Tabellenzeilen kopieren in eine Datendatei (Azure SQL-Datenbank)

Das folgende Beispiel zeigt die out Option in der SalesLT.Customer Tabelle in der AdventureWorksLT Beispieldatenbank in der Azure SQL-Datenbank. In diesem Beispiel wird die Datendatei Customer.bcp erstellt, und die Tabellendaten werden mithilfe eines Zeichenformats in die Datendatei kopiert. Ersetzen Sie <server_name> durch einen Wert für Ihre Umgebung.

Hinweis

Der Switch -G ermöglicht die Microsoft Entra-Authentifizierung. Weitere Informationen finden Sie unter Authenticate with Microsoft Entra ID in bcp.

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

M. Kopiere Daten aus einer Datei in eine Tabelle (Azure SQL-Datenbank)

Das folgende Beispiel zeigt die in-Option für die Tabelle SalesLT.Customer in Azure SQL-Datenbank unter Verwendung der Datendatei Customer.bcp, die Sie zuvor erstellt haben. Ersetzen Sie <server_name> durch einen Wert für Ihre Umgebung.

Hinweis

Der Switch -E bewahrt die Identitätswerte aus der Datendatei.

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

N. Kopiere Daten von einer Abfrage in eine Datendatei (Azure SQL-Datenbank)

Um die Ergebnismenge einer Transact-SQL-Anweisung in eine Datendatei in Azure SQL-Datenbank zu kopieren, verwenden Sie die queryout-Option. Das folgende Beispiel kopiert Kundennamen aus der SalesLT.Customer Tabelle in der AdventureWorksLT Datenbank in die Customer_A.txt Datendatei. Ersetzen Sie <server_name> durch einen Wert für Ihre Umgebung.

Hinweis

Verwenden Sie den Schalter -t, um eine durch Kommas getrennte Datei zu erstellen.

An der Eingabeaufforderung geben Sie folgenden Befehl ein:

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

Weitere Beispiele

Die folgenden Artikel enthalten Beispiele für die Verwendung von bcp:

Hilfe erhalten

Zur SQL-Dokumentation beitragen

Wussten Sie schon, dass Sie SQL-Inhalte selbst bearbeiten könnten? Wenn Sie dies tun, helfen Sie nicht nur, unsere Dokumentation zu verbessern, sondern werden Sie auch als Mitwirkender der Seite erwähnt.

Weitere Informationen finden Sie unter Edit Microsoft Learn documentation.