Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Datenbank in Microsoft Fabric
Das Massenkopieprogrammprogramm (bcp) kopiert Daten zwischen einer Instanz von SQL Server und einer Datendatei in einem vom Benutzer angegebenen Format.
Bemerkungen
Informationen dazu, wo Sie das bcp-Hilfsprogramm und die Syntaxkonventionen der Eingabeaufforderungshilfsprogramme finden oder wie sie ausgeführt werden, finden Sie unter SQL-Befehlszeilenhilfsprogramme (Database 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.
Unterstützung nativer Datendateien
In SQL Server unterstützt das Hilfsprogramm bcp native Datendateien, die mit SQL Server-Versionen ab SQL Server 2000 (8.x) und höher 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 outwird beispielsweise die DatendateiCurrency Types.daterstellt:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cSie müssen die Option
-qverwenden, 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
-qan, oderEinschließen des Besitzer-, Tabellen- oder Sichtnamens in eckige Klammern (
[]) innerhalb der Anführungszeichen.
Datenvalidierung
bcp erzwingt nun Datenüberprüfungen, die dazu führen können, dass Skripts einen Fehler auslösen, wenn sie für ungültige Daten in einer Datendatei ausgeführt werden. So wird durch bcp jetzt Folgendes überprüft:
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 auf der Clientcodeseite oder auf der Codeseite gesendet, die durch die Sortierung impliziert wird. 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-coder-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 beispielsweisebcp out,bcp inund dannbcp outverwenden, ü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-tund-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
Für die Beispiele in diesem Abschnitt wird die Beispieldatenbank WideWorldImporters für SQL Server 2016 (13.x) und höhere Versionen, Azure SQL-Datenbank und Azure SQL Managed Instance verwendet.
WideWorldImporters kann von https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0 heruntergeladen werden. Die Syntax zum Wiederherstellen der Beispieldatenbank finden Sie unter RESTORE-Anweisungen.
Beispieltestbedingungen
Sofern nicht anders angegeben, wird bei diesem Beispiel vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie den bcp-Befehl ausführen. In vielen der Beispiele wird ein Verzeichnis mit dem Namen D:\bcp verwendet. Ersetzen sie <server_name> und andere Platzhalterwerte durch Werte für Ihre Umgebung.
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)
In den folgenden Beispielen wird die Verwendung der Option out in der Tabelle WideWorldImporters.Warehouse.StockItemTransactions veranschaulicht.
Grundlegend
In diesem Beispiel wird die Datendatei
StockItemTransactions_character.bcperstellt, 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 -TExpanded
In diesem Beispiel wird die Datendatei
StockItemTransactions_native.bcperstellt, 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)
Im folgenden Beispiel wird die Option out für die Tabelle WideWorldImporters.Warehouse.StockItemTransactions veranschaulicht. 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 veranschaulichen die Option in für die Tabelle WideWorldImporters.Warehouse.StockItemTransactions_bcp unter Verwendung der 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 -TExpanded
Dieses Beispiel verwendet die
StockItemTransactions_native.bcp-Datendatei, die zuvor erstellt wurde. Das Beispiel verwendet außerdem denTABLOCKHinweis 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.logundOutput_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 einen bcp-Importvorgang mit angegebener Codepage 65001:
bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...
K. Beispielausgabedatei mit benutzerdefinierten Feld- und Zeilenabschlusszeichen
Dieses Beispiel zeigt zwei Dateien, die von bcp mit benutzerdefinierten Feld- und Zeilenabschlusszeichen generiert werden.
Erstellen Sie eine
dbo.T1-Tabelle in dertempdb-Datenbank mit zwei Spalten,IDundName.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'); GOGenerieren Sie eine Ausgabedatei aus der Beispieltabelle
dbo.T1mithilfe 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,RandolphGenerieren Sie eine Ausgabedatei aus der Beispieltabelle
dbo.T1mithilfe 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.
Weitere Beispiele
Die folgenden Artikel enthalten Beispiele zur Verwendung von bcp:
Datenformate für Massenimport oder Massenexport (SQL Server)
- Verwenden des nativen Formats zum Importieren oder Exportieren von Daten (SQL Server)
- Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten (SQL Server)
- Verwenden des systemeigenen Unicode-Formats zum Importieren oder Exportieren von Daten (SQL Server)
- Verwenden des Unicode-Zeichenformats zum Importieren oder Exportieren von Daten (SQL Server)
Beibehalten von NULL-Werten oder Standardwerten während des Massenimports (SQL Server)
Beibehalten von Identitätswerten beim Massenimport von Daten (SQL Server)
Formatieren von Dateien zum Importieren oder Exportieren von Daten (SQL Server)
- Erstellen einer Formatdatei mit bcp (SQL Server)
- Massenimport von Daten mithilfe einer Formatdatei (SQL Server)
- Überspringen einer Tabellenspalte mithilfe einer Formatdatei (SQL Server)
- Auslassen eines Datenfelds mithilfe einer Formatdatei (SQL Server)
- Verwenden einer Formatdatei zum Zuordnen von Tabellenspalten zu Datendateifeldern (SQL Server)
Beispiele für den Massenimport und -export von XML-Dokumenten (SQL Server)
Verwandte Inhalte
- Vorbereiten von Daten für den Massenexport oder -import
- MASSENEINFÜGUNG (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- Formatdateien zum Importieren oder Exportieren von Daten (SQL Server)
Hilfe erhalten
- Ideen für SQL: Haben Sie Vorschläge zur Verbesserung von SQL Server?
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (tag sql-server): Stellen Sie SQL Server Fragen
- Stack Overflow (tag sql-server): Antworten auf SQL-Entwicklungsfragen
- Microsoft SQL Server Lizenzbedingungen und -informationen
- Supportoptionen für Geschäftsbenutzer
- Zusätzliche SQL Server-Hilfe und Feedback
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.