bcp (Hilfsprogramm)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Mit dem Massenkopierprogramm (bcp) werden Daten per Massenvorgang zwischen einer Instanz von Microsoft SQL Server und einer Datendatei in einem benutzerdefinierten Format kopiert.
Informationen zur Verwendung von bcp unter Linux finden Sie unter Installieren der SQL Server-Befehlszeilentools sqlcmd und bcp unter Linux. Ausführliche Informationen zum Verwenden von bcp mit Azure Synapse Analytics finden Sie unter Laden von Daten mit bcp.
Das Hilfsprogramm bcp kann verwendet werden, um große Mengen neuer Zeilen in SQL Server -Tabellen zu importieren oder um Daten aus Tabellen in Datendateien zu exportieren. Außer in Verbindung mit der Option queryout
sind für das Hilfsprogramm keine Kenntnisse von Transact-SQL erforderlich. Um Daten in eine Tabelle zu importieren, müssen Sie entweder eine für diese Tabelle erstellte Formatdatei verwenden oder die Struktur der Tabelle und die Art der Daten kennen, die in den Tabellenspalten zulässig sind.
Hinweis
Wenn Sie Ihre Daten mit bcp sichern, müssen Sie zum Aufzeichnen des Datenformats eine Formatdatei erstellen. bcp -Datendateien enthalten keine Schema- oder Formatinformationen. Daher können Sie die Daten möglicherweise nicht mehr importieren, wenn Sie eine Tabelle löschen und keine Formatdatei vorhanden ist.
Informationen zu den in der bcp-Syntax verwendeten Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
Herunterladen der aktuellen Version des Hilfsprogramms bcp
Die Befehlszeilentools sind allgemein verfügbar (GA-Version), sie werden jedoch mit dem Installationspaket für SQL Server 2019 (15.x) und höheren Versionen veröffentlicht.
Windows
- Herunterladen des ODBC-Treibers für SQL Server
- Herunterladen der Microsoft-Befehlszeilen-Hilfsprogramme 15 für SQL Server (x64)
- Herunterladen der Microsoft-Befehlszeilen-Hilfsprogramme 15 für SQL Server (x86)
Linux und macOS
Unter Installieren von sqlcmd und bcp unter Linux finden Sie Anweisungen zum Installieren von sqlcmd und bcp unter Linux und macOS finden Sie unter.
Versionsinformationen
- Releasenummer: 15.0.4298.1
- Buildnummer: 15.0.4298.1
- Veröffentlichungsdatum: 7. April 2023
bcp unterstützt die Microsoft Entra-Authentifizierung, einschließlich der Unterstützung der Multi-Faktor-Authentifizierung (MFA) für Azure SQL-Datenbank und Azure Synapse Analytics.
Hinweis
Microsoft Entra ID war zuvor als Azure Active Directory (Azure AD) bekannt.
Systemanforderungen
Windows 8, Windows 8.1, Windows 10, Windows 11
Windows Server 2016, Windows Server 2019, Windows Server 2022
Für diese Komponente ist die neueste Version von Microsoft ODBC Driver 17 for SQL Server erforderlich.
Führen Sie zum Überprüfen der bcp-Version den Befehl bcp -v
aus, und vergewissern Sie sich, dass sie mindestens 15.0.4298.1 ist.
Hinweis
sqlcmd und bcp sind auch unter Linux verfügbar. Weitere Informationen finden Sie unter Installieren der SQL Server-Befehlszeilentools sqlcmd und bcp unter Linux.
Syntax
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 Azure Active Directory 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]
[-v]
[-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 ) ]
[-w]
[-x]
Befehlszeilenoptionen
database_name
Der Name der Datenbank mit der angegebenen Tabelle oder Sicht. Wenn kein Name angegeben ist, wird diese Datenbank als Standarddatenbank des Benutzers verwendet.
Sie können den Datenbanknamen mit -d
auch explizit angeben.
schema
Der Name des Besitzers der Tabelle oder Sicht. schema ist optional, wenn der Benutzer, der den Vorgang ausführt, der Besitzer der angegebenen Tabelle oder Sicht ist. Wenn schema nicht angegeben wird und der den Vorgang ausführende Benutzer nicht Besitzer der angegebenen Tabelle oder Sicht ist, gibt SQL Server eine Fehlermeldung zurück, und der Vorgang wird abgebrochen.
table_name
Der Name der Zieltabelle, wenn Daten in SQL Server importiert werden (in
), oder der Quelltabelle, wenn Daten aus SQL Server exportiert werden (out
).
view_name
Der Name der Zielsicht, wenn Daten in SQL Server kopiert werden (in
), oder der Quellsicht, wenn Daten aus SQL Server kopiert werden (out
). Als Zielsichten können nur Sichten verwendet werden, in denen alle Spalten auf dieselbe Tabelle verweisen. Weitere Informationen zu den Einschränkungen beim Kopieren von Daten in Sichten finden Sie unter INSERT.
"query"
Eine Transact-SQL-Abfrage, die ein Resultset zurückgibt. Wenn die Abfrage mehrere Resultsets zurückgibt, wird nur das erste Resultset in die Datendatei kopiert; nachfolgende Resultsets werden nicht berücksichtigt. Schließen Sie die Abfrage in doppelte Anführungszeichen und alle Elemente, die in die Abfrage eingebettet sind, in einfache Anführungszeichen ein. queryout
muss auch angegeben werden, wenn Sie eine Massenkopie von Daten aus einer Abfrage durchführen.
Die Abfrage kann auf eine gespeicherte Prozedur verweisen, sofern alle Tabellen, auf die innerhalb der gespeicherten Prozedur verwiesen wird, vor der Ausführung der bcp-Anweisung vorhanden sind. Wenn die gespeicherte Prozedur beispielsweise eine temporäre Tabelle generiert, tritt bei der bcp -Anweisung ein Fehler auf, da die temporäre Tabelle nur zur Laufzeit und nicht zum Zeitpunkt der Anweisungsausführung verfügbar ist. Ziehen Sie in diesem Fall in Erwägung, die Ergebnisse der gespeicherten Prozedur in eine Tabelle einzufügen und dann bcp zum Kopieren der Daten aus der Tabelle in eine Datendatei zu verwenden.
in
Kopiert Daten aus einer Datei in die Datenbanktabelle oder -sicht. Gibt die Richtung des Massenkopierens an.
out
Kopiert Daten aus der Datenbanktabelle oder -sicht in eine Datei. Gibt die Richtung des Massenkopierens an.
Wenn Sie eine vorhandene Datei angeben, wird die Datei überschrieben. Das Hilfsprogramm bcp stellt beim Extrahieren von Daten leere Zeichenfolgen als NULL-Zeichenfolgen und NULL-Zeichenfolgen als leere Zeichenfolgen dar.
data_file
Der vollständige Pfad der Datendatei. Wenn Daten in SQL Servermassenimportiert werden, enthält die Datendatei die Daten, die in die angegebene Tabelle oder Sicht kopiert werden sollen. Beim Massenexportieren aus SQL Serverenthält die Datendatei die Daten, die aus der Tabelle oder Sicht kopiert wurden. Der Pfad kann 1 bis 255 Zeichen enthalten. Die Datendatei kann maximal 2^63-1 Zeilen enthalten.
queryout
Kopiert Daten aus einer Abfrage und muss nur beim Massenkopieren von Daten über eine Abfrage angegeben werden.
format
Erstellt eine Formatdatei basierend auf der angegebenen Option (-n
, -c
, -w
oder -N
) und den Tabellen- oder Sichttrennzeichen. Beim Massenkopieren von Daten kann der Befehl bcp auf eine Formatdatei verweisen. Dies erspart Ihnen die wiederholte interaktive Eingabe von Formatinformationen. Für die Option format
ist die Option -f
erforderlich. Zum Erstellen einer XML-Formatdatei muss zudem die Option -x
angegeben werden. Weitere Informationen finden Sie unter Erstellen einer Formatdatei (SQL Server). Sie müssen nul
als Wert angeben (format nul
).
-a packet_size
Gibt an, wie viele Bytes pro Netzwerkpaket an den Server bzw. vom Server gesendet werden. Eine Serverkonfigurationsoption kann mithilfe von SQL Server Management Studio (oder der gespeicherten Systemprozedur sp_configure
) festgelegt werden. Die Serverkonfigurationsoption kann jedoch mithilfe dieser Option einzeln überschrieben werden. packet_size kann ein Wert von 4.096 bis 65.535 Bytes sein. Der Standardwert ist 4096
.
Durch einen höheren Wert für die Paketgröße kann die Leistung von Massenkopiervorgängen verbessert werden. Wenn ein größeres Paket angefordert, aber nicht gewährt werden kann, wird die Standardeinstellung verwendet. Die vom Hilfsprogramm bcp generierte Leistungsstatistik zeigt die verwendete Paketgröße an.
-b batch_size
Gibt die Anzahl von Zeilen pro importierten Datenbatch an. Jeder Batch wird als separate Transaktion importiert und protokolliert, für die erst dann ein Commit ausgeführt wird, nachdem der gesamte Batch importiert wurde. Standardmäßig werden alle Zeilen in der Datendatei als jeweils ein Batch importiert. Um die Zeilen auf mehrere Batches aufzuteilen, geben Sie mit batch_size eine Batchgröße an, die kleiner ist als die Anzahl von Zeilen in der Datendatei. Wenn die Transaktion für einen Batch einen Fehler erzeugt, wird nur für die Einfügungen aus dem aktuellen Batch ein Rollback ausgeführt. Auf Batches, die bereits durch Transaktionen importiert wurden, für die ein Commit ausgeführt wurde, wirken sich spätere Fehler nicht aus.
Verwenden Sie diese Option nicht mit der Option -h "ROWS_PER_BATCH=<bb>"
.
-c
Führt den Vorgang mithilfe eines Zeichendatentyps aus. Diese Option fordert für keines der Felder zu einer Eingabe auf. Es werden folgende Einstellungen verwendet: char als Speichertyp, keine Präfixe, \t
(Tabstoppzeichen) als Feldtrennzeichen und \r\n
(Zeilenumbruchzeichen) als Zeilenabschlusszeichen. -c
ist nicht kompatibel mit -w
.
Weitere Informationen finden Sie unter Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten (SQL Server).
-C { ACP | OEM | RAW | code_page }
Gibt die Codepage für die in der Datendatei enthaltenen Daten an. Codepage ist nur dann von Bedeutung, wenn die Daten char-, varchar- oder text -Spalten mit Zeichenwerten enthalten, die größer als 127 oder kleiner als 32 sind.
Hinweis
Es wird empfohlen, für jede Spalte in einer Formatdatei einen Sortierungsnamen anzugeben, außer wenn die 65001-Option Priorität vor der Angabe von Sortierung/Codepage haben soll.
Codepagewert | BESCHREIBUNG |
---|---|
ACP | ANSI/Microsoft Windows (ISO 1252). |
OEM | Standardcodepage, die vom Client verwendet wird. Die Standardcodepage, die verwendet wird, wenn -C nicht angegeben wird. |
RAW | Es erfolgt keine Konvertierung von einer Codepage zu einer anderen. Dies ist die schnellste Option, da keine Konvertierung vorgenommen wird. |
Codepage | Bestimmte Codepagenummer, z. B. 850. In Versionen vor Version 13 (SQL Server 2016 [13.x]) wird die Codepage 65001 (UTF-8-Codierung) nicht unterstützt. Ab Version 13 kann die UTF-8-Codierung in frühere Versionen von SQL Serverimportiert werden. |
-d database_name
Gibt die Datenbank an, mit der eine Verbindung hergestellt werden soll. bcp stellt standardmäßig eine Verbindung mit der Standarddatenbank des Benutzers her. Wenn -d <database_name>
und ein dreiteiliger Name (database_name.schema.table, der als erster Parameter an bcp übergeben wird) angegeben sind, tritt ein Fehler auf, weil Sie den Datenbanknamen nicht zweimal angeben dürfen. Wenn database_name mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen zwischen -d
und dem Datenbanknamen kein Leerzeichen hinzu.
-d
Bewirkt, dass der Wert, der an die bcp -S
-Option übergeben wird, als Datenquellenname (Data Source Name, DSN) interpretiert wird. Ein DSN kann zum Einbetten von Treiberoptionen verwendet werden, um Befehlszeilen zu vereinfachen, Treiberoptionen zu erzwingen, die nicht auf anderem Weg über die Befehlszeile verfügbar sind – wie etwa MultiSubnetFailover –, oder um den Schutz vertraulicher Anmeldeinformation vor Entdeckung als Befehlszeilenargumente zu unterstützen. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit sqlcmd im Abschnitt DSN-Unterstützung in sqlcmd und bcp.
-e err_file
Gibt den vollständigen Pfad einer Fehlerdatei an, in der alle Zeilen gespeichert werden, die das Hilfsprogramm bcp nicht von der Datei in die Datenbank übertragen kann. Die durch den bcp -Befehl generierten Fehlermeldungen werden an die Arbeitsstation des Benutzers gesendet. Wenn diese Option nicht verwendet wird, wird keine Fehlerdatei erstellt.
Wenn err_file mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen Sie zwischen -e
und dem Wert von err_file kein Leerzeichen hinzu.
-E
Gibt an, dass der oder die Identitätswerte in der importierten Datendatei für die Identitätsspalte verwendet werden sollen. Wenn -E
nicht angegeben wird, werden die Identitätswerte für diese Spalte in der zu importierenden Datendatei ignoriert. SQL Server weist automatisch eindeutige Werte zu, und zwar basierend auf den Ausgangswerten und den inkrementellen Werten, die beim Erstellen der Tabelle angegeben wurden. Weitere Informationen finden Sie unter DBCC CHECKIDENT.
Wenn die Datendatei keine Werte für die Identitätsspalte in der Tabelle oder Sicht enthält, geben Sie mithilfe einer Formatdatei an, dass die Identitätsspalte der Tabelle oder Sicht beim Importieren von Daten ausgelassen werden soll. SQL Server weist der Spalte automatisch eindeutige Werte zu.
Für die Option -E
sind besondere Berechtigungen erforderlich. Weitere Informationen finden Sie weiter unten in diesem Artikel unter Hinweise.
-f format_file
Gibt den vollständigen Pfad einer Formatdatei an. Die Bedeutung dieser Option hängt von der Umgebung ab, in der sie verwendet wird. Folgende Bedeutungen sind möglich:
Wird
-f
mit der Optionformat
verwendet, wird die angegebene Formatdatei für die angegebene Tabelle oder Sicht erstellt. Zum Erstellen einer XML-Formatdatei müssen Sie zudem die Option-x
angeben. Weitere Informationen finden Sie unter Erstellen einer Formatdatei (SQL Server).Falls mit der Option
in
oderout
verwendet, erfordert-f
eine vorhandene Formatdatei.Hinweis
Die Verwendung einer Formatdatei mit der Option
in
oderout
ist optional. Wenn die Option-f
fehlt und-n
,-c
,-w
oder-N
nicht angegeben wurde, werden Sie vom Befehl zur Angabe von Formatinformationen aufgefordert, und Sie erhalten die Möglichkeit, Ihre Antworten in einer Formatdatei (mit dem Standarddateinamenbcp.fmt
) zu speichern.
Wenn format_file mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen Sie zwischen -f
und dem Wert von format_file kein Leerzeichen hinzu.
-F first_row
Gibt die Nummer der ersten Zeile an, die aus einer Tabelle exportiert oder von einer Datendatei importiert werden soll. Für diesen Parameter muss ein Wert größer als (>
) 0, jedoch kleiner (<
) oder gleich (=
) der Gesamtanzahl der Zeilen angegeben werden. Fehlt dieser Parameter, wird standardmäßig die erste Zeile der Datei angenommen.
erste_Zeile kann eine positive ganze Zahl mit einem Wert bis zu 2^63-1 sein. -F
first_row basiert auf 1.
-G
Gilt für: nur Azure SQL-Datenbank und Azure Synapse Analytics.
Diese Option wird vom Client beim Herstellen einer Verbindung mit Azure SQL-Datenbank oder Azure Synapse Analytics verwendet, um anzugeben, dass der Benutzer mithilfe der Authentifizierung mit Microsoft Entra ID authentifiziert werden soll. Der Schalter „-G“ erfordert mindestens Version 14.0.3008.27. Um die Version zu bestimmen, führen Sie bcp -v
aus. Weitere Informationen finden Sie unter Verwendung der Microsoft Entra-Authentifizierung mit SQL-Datenbank oder Azure Synapse Analytics.
Wichtig
Die interaktive Microsoft Entra-Authentifizierung wird unter Linux und macOS derzeit nicht unterstützt. Die integrierte Azure AD-Authentifizierung erfordert Microsoft ODBC-Treiber 17 für SQL Server ab Version 17.6.1 und eine ordnungsgemäß konfigurierte Kerberos-Umgebung.
Tipp
Um zu überprüfen, ob Ihre Version von bcp Unterstützung für die Microsoft Entra-Authentifizierung bietet, geben Sie bcp --help
ein, und überprüfen Sie, ob -G
in der Liste der verfügbaren Argumente angezeigt wird.
Microsoft Entra-Authentifizierung mit Benutzername und Kennwort
Wenn Sie einen Microsoft Entra-Benutzernamen und das zugehörige Kennwort verwenden möchten, können Sie unter Verwendung der Optionen
-U
und-P
die-G
-Option mit dem Benutzernamen und dem Kennwort angeben.Im folgenden Beispiel werden Daten unter Verwendung der aus Microsoft Entra-Benutzername und -Kennwort bestehenden Anmeldeinformationen exportiert. Im Beispiel wird die Tabelle
bcptest
aus der Datenbanktestdb
vom Azure-Serveraadserver.database.windows.net
exportiert, und die Daten werden in der Dateic:\last\data1.dat
gespeichert:bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
Im folgenden Beispiel werden Daten mithilfe der Anmeldeinformationen eines Microsoft Entra-Benutzers importiert. Im Beispiel werden Daten aus der Datei
c:\last\data1.dat
in die Tabellebcptest
für die Datenbanktestdb
auf dem Azure-Serveraadserver.database.windows.net
unter Verwendung eiens Microsoft Entra-Benutzernamen und -Kennworts importiert: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 integriert
Wenn Sie die integrierte Azure AD-Authentifizierung verwenden möchten, geben Sie die Option
-G
ohne Benutzername und Kennwort an. Bei dieser Konfiguration ist es erforderlich, dass das aktuelle Windows-Benutzerkonto (das Konto, unter dem der bcp-Befehl ausgeführt wird) im Verbund mit Microsoft Entra ID agiert:Im folgenden Beispiel werden Daten mithilfe der integrierten Microsoft Entra-Authentifizierung exportiert. Im Beispiel wird die Tabelle
bcptest
aus der Datenbanktestdb
auf dem logischen Serveraadserver.database.windows.net
exportiert und die Daten in der Dateic:\last\data2.dat
gespeichert, wobei Windows-Anmeldeinformationen verwendet werden, die mit Microsoft Entra ID verbunden sind:bcp bcptest out "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c
Im folgenden Beispiel werden Daten mithilfe der integrierten Microsoft Entra-Authentifizierung importiert. Im Beispiel werden Daten aus der Dateitabelle
c:\last\data2.dat
in die Tabellebcptest
in der Datenbanktestdb
auf dem logischen Serveraadserver.database.windows.net
importiert, wobei Windows-Anmeldeinformationen mit Microsoft Entra ID verbunden sind:bcp bcptest in "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c
Verwaltete Dienstidentität in Microsoft Entra
Wichtig
bcp ist eng an den Treiber gekoppelt. In den Hauptversionen von bcp und dem Treiber wird ein DSN erstellt, der gleich sein muss. Um die Version zu bestimmen, führen Sie
bcp -v
aus.Zum Exportieren von Daten über bcp über eine verwaltete Dienstidentität unter Windows muss ein DSN konfiguriert werden.
Gehen Sie zum Konfigurieren eines DSN auf einem Computer unter Windows folgendermaßen vor:
- Drücken Sie auf Ihrer Tastatur die Windows-Taste.
- Geben Sie
ODBC
ein und wählen Sie die entsprechende Version des ODBC-Datenquellenadministrators aus. - Wählen Sie entweder die Registerkarte Benutzer-DSN oder System-DSN aus.
- Wählen Sie Hinzufügen aus und folgen Sie den Eingabeaufforderungen.
- Wenn Sie nach einem Authentifizierungstyp gefragt werden, wählen Sie die Authentifizierung für verwaltete Dienstidentität in Azure aus.
- Wenn Sie über eine benutzerseitig zugewiesene verwaltete Identität verfügen, fügen Sie die
Object (principal) ID
der Identität in das Feld Anmelde-ID unten auf der Registerkarte „Authentifizierung“ ein. - Folgen Sie weiter den Anweisungen zum Konfigurieren des DSN.
Eine vollständige exemplarische Vorgehensweise, einschließlich Screenshots, finden Sie unter Erstellen und Bearbeiten von DSNs in der Benutzeroberfläche.
Wenn der DSN konfiguriert ist, kann bcp mit dem
-D
-Flag aufgerufen werden, das angibt, dass der übergebene Wert für-S
ein DSN ist.bcp bcptest out "c:\last\data1.dat" -c -D -S myDSN -d testdb
Microsoft Entra ID-Zugriffstoken
Benutzer von bcp (17.8 und höher) können sich auch mit einem Token authentifizieren. In den folgenden Beispielen wird über PowerShell unter Linux ein Zugriffstoken abgerufen.
In diesem Beispiel wird ein Zugriffstoken abgerufen und in eine Datei eingefügt, um Daten über eine systemseitig zugewiesene verwaltete Identität zu exportieren.
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
In diesem Beispiel wird eine
Client ID
an den Parameter-AccountId
vonConnect-AzAccount
übergeben, um ein Zugriffstoken abzurufen und in eine Tokendatei einzufügen. Das Token wird dann zum Exportieren von Daten über die angegebene benutzerseitig zugewiesene verwaltete Identität verwendet.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
Microsoft Entra interaktiv
Mit der interaktiven Microsoft Entra-Authentifizierung, die für alle Azure SQL und SQL Server 2022+ verfügbar ist, können Sie ein interaktives Dialogfeld zur Authentifizierung verwenden, das auch die Multi-Faktor-Authentifizierung unterstützt.
Die interaktive Microsoft Entra-Authentifizierung erfordert die bcp-Version 15.0.1000.34 oder höher sowie die ODBC-Version 17.2 oder höher.
Geben Sie zum Aktivieren der interaktiven Authentifizierung die Option
-G
nur mit dem Benutzernamen (-U
) ohne Kennwort an.Im folgenden Beispiel werden Daten mithilfe der interaktiven Microsoft Entra-Authentifizierung exportiert, einschließlich der Angabe des Benutzernamens eines Microsoft Entra-Kontos.
Im interaktiven Modus muss ein Kennwort manuell eingegeben werden. Bei Konten mit Multi-Faktor-Authentifizierung müssen Sie Ihre konfigurierte MFA-Authentifizierungsmethode vervollständigen.
bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com
Für den Fall, dass Microsoft Entra-Benutzer*innen auch Benutzer*innen eines Domänenverbunds sind und ein Windows-Konto verwenden, muss der in der Befehlszeile erforderliche Benutzername deren Domänenkonto enthalten (z. B.
joe@contoso.com
):bcp bcptest out "c:\last\data1.dat" -c -S aadserver.database.windows.net -d testdb -G -U joe@contoso.com
Der Gastbenutzeralias (z. B.
keith0@adventure-works.com
) wird verwendet, wenn Gastbenutzer*innen in einem bestimmten Microsoft Entra-Mandanten vorhanden sind und zu einer Gruppe gehören, die in SQL-Datenbank vorhanden ist und über Datenbankberechtigungen zum Ausführen des bcp-Befehls verfügt.
-h "hints [, ... n]"
Gibt den oder die Hinweise an, die beim Massenimportieren von Daten in eine Tabelle oder Sicht verwendet werden sollen.
ORDER (column [ASC | DESC] [, ...n])
Die Sortierreihenfolge der Daten in der Datendatei. Die Leistung des Massenkopierens wird verbessert, wenn die zu importierenden Daten entsprechend dem gruppierten Index der Tabelle (falls vorhanden) sortiert sind. Wenn die Datendatei in einer anderen Reihenfolge sortiert wird, die von der Reihenfolge eines Schlüssels des gruppierten Indexes abweicht, oder die Tabelle keinen gruppierten Index hat, wird die ORDER-Klausel ignoriert. Die angegebenen Spaltennamen müssen gültige Spaltennamen in der Zieltabelle sein. Standardmäßig geht bcp davon aus, dass die Datendatei nicht sortiert ist. Beim optimierten Massenimport wird in SQL Server auch überprüft, ob die importierten Daten sortiert sind.
ROWS_PER_BATCH = bb
Die Anzahl von Datenzeilen pro Batch (als bb). Dieser Hinweis wird verwendet, wenn
-b
nicht angegeben wird. Er bewirkt, dass die gesamte Datendatei in einer einzigen Transaktion an den Server gesendet wird. Der Server optimiert das Massenladen entsprechend dem Wert bb. Standardmäßig ist ROWS_PER_BATCH unbekannt.KILOBYTES_PER_BATCH = cc
Die ungefähre Anzahl von Kilobytes (KB) an Daten pro Batch (als cc). In der Standardeinstellung ist KILOBYTES_PER_BATCH unbekannt.
TABLOCK
Gibt an, dass eine Massenupdatesperre auf Tabellenebene für die Dauer des Massenladens aktiviert wird. Andernfalls wird eine Sperre auf Zeilenebene aktiviert. Dieser Hinweis verbessert die Leistung beträchtlich, da weniger Sperrkonflikte für die Tabelle auftreten, wenn diese während des Massenkopiervorgangs gesperrt wird. Eine Tabelle kann gleichzeitig von mehreren Clients geladen werden, wenn die Tabelle keine Indizes aufweist und TABLOCK angegeben ist. Standardmäßig wird das Sperrverhalten durch die Tabellenoption table lock on bulk load (Tabellensperre bei Massenladen) bestimmt.
Hinweis
Wenn die Zieltabelle ein gruppierter Columnstore-Index ist, ist der TABLOCK-Hinweis zum Laden durch mehrere Clients gleichzeitig nicht erforderlich, da jedem gleichzeitig ausgeführten Thread eine eigene Zeilengruppe im Index zugewiesen wird, in die er Daten lädt. Details finden Sie in den Artikeln zu den Konzepten von Columnstore-Index.
CHECK_CONSTRAINTS
Gibt an, dass alle Einschränkungen, die für die Zieltabelle oder -sicht gelten, während des Massenimportvorgangs überprüft werden müssen. Ohne den CHECK_CONSTRAINTS-Hinweis werden alle CHECK- und FOREIGN KEY-Einschränkungen ignoriert. Nach dem Vorgang wird die Einschränkung für die Tabelle als nicht vertrauenswürdig markiert.
Hinweis
UNIQUE-, PRIMARY KEY- und NOT NULL-Einschränkungen werden immer erzwungen.
Zu einem bestimmten Zeitpunkt sollten Sie allerdings die Einschränkungen für die gesamte Tabelle überprüfen. Wenn die Tabelle vor dem Massenimportvorgang nicht leer war, kann der Aufwand der erneuten Überprüfung denjenigen der Anwendung von CHECK-Einschränkungen auf die inkrementellen Daten überschreiten. Daher empfiehlt es sich normalerweise, die Einschränkungsüberprüfung beim inkrementellen Massenimportieren zu aktivieren.
Die Deaktivierung von Einschränkungen (das Standardverhalten) kann z. B. erwünscht sein, wenn die Eingabedaten Zeilen enthalten, die Einschränkungen verletzen. Wenn CHECK-Einschränkungen deaktiviert sind, können Sie die Daten importieren und anschließend mit Transact-SQL-Anweisungen ungültige Daten entfernen.
Hinweis
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.
Hinweis
Der Schalter
-m
max_errors gilt nicht für die Einschränkungsüberprüfung.FIRE_TRIGGERS
Bei Angabe mit dem in-Argument werden die für die Zieltabelle definierten INSERT-Trigger während des Massenkopiervorgangs ausgeführt. Wenn FIRE_TRIGGERS nicht angegeben ist, werden keine Einfügungstrigger ausgeführt. FIRE_TRIGGERS wird für die Argumente
out
,queryout
undformat
ignoriert.
-i input_file
Gibt den Namen einer Antwortdatei an, die für jedes Datenfeld die Antworten enthält, die während eines Massenkopiervorgangs im interaktiven Modus auf die an der Eingabeaufforderung gestellten Fragen eingegeben wurden. (-n
, -c
, -w
oder -N
wurde nicht angegeben.)
Wenn input_file mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen zwischen -i
und dem Wert input_file kein Leerzeichen hinzu.
-k
Gibt an, dass während des Vorgangs keine Standardwerte in leere Spalten eingefügt werden, sondern ein NULL-Wert für diese Spalten beibehalten werden soll. Weitere Informationen finden Sie unter Beibehalten von NULL-Werten oder Standardwerten während des Massenimports (SQL Server).
-K application_intent
Deklariert den Arbeitsauslastungstyp der Anwendung beim Herstellen einer Verbindung mit einem Server. Der einzig mögliche Wert ist ReadOnly
. Wenn -K
nicht angegeben wird, unterstützt das Hilfsprogramm bcp keine Konnektivität mit einem sekundären Replikat in einer Always On-Verfügbarkeitsgruppe. Weitere Informationen finden Sie unter Auslagern von schreibgeschützten Arbeitsauslastungen auf ein sekundäres Replikat einer Always On-Verfügbarkeitsgruppe.
-l login_timeout
Gibt einen Anmeldungstimeout an. Die Option -l
gibt an, wie viele Sekunden beim Herstellen einer Verbindung mit einem Server verstreichen dürfen, bevor für eine Anmeldung bei SQL Server ein Timeout eintritt. Das Standardanmeldetimeout beträgt 15 Sekunden. Der Timeoutwert für den Anmeldungszeitraum muss eine Zahl zwischen 0 und 65534 sein. Wenn der angegebene Wert kein numerischer Wert ist oder außerhalb dieses Bereichs liegt, generiert bcp eine Fehlermeldung. Der Wert 0 gibt ein unendliches Timeout an.
-L last_row
Gibt die Nummer der letzten Zeile an, die aus einer Tabelle exportiert oder von einer Datendatei importiert werden soll. Für diesen Parameter muss ein Wert größer als (>
) 0, jedoch kleiner (<
) oder gleich (=
) der Nummer der letzten Zeile angegeben werden. Fehlt dieser Parameter, wird standardmäßig die letzte Zeile der Datei angenommen.
letzte_Zeile kann eine positive ganze Zahl mit einem Wert bis zu 2^63-1 sein.
-m max_errors
Gibt an, wie viele Syntaxfehler maximal auftreten können, bevor der bcp -Vorgang abgebrochen wird. Ein Syntaxfehler setzt einen Fehler bei der Datenkonvertierung in den Zieldatentyp voraus. Der Wert von max_Fehler schließt alle Fehler aus, die nur auf dem Server erkannt werden können, z.B. Einschränkungsverletzungen.
Eine Zeile, die vom Hilfsprogramm bcp nicht kopiert werden kann, wird ignoriert und als ein Fehler gezählt. Wenn diese Option nicht enthalten ist, wird der Standardwert 10 verwendet.
Hinweis
Die Option -m
gilt nicht für die Konvertierung der Datentypen money oder bigint.
-n
Führt das Massenkopieren mithilfe der systemeigenen (Datenbank-)Datentypen der Daten aus. Diese Option fordert für keines der Felder zu einer Eingabe auf, sondern verwendet die nativen Werte.
Weitere Informationen finden Sie unter Verwenden des nativen Formats zum Importieren oder Exportieren von Daten (SQL Server).
-N
Führt den Massenkopiervorgang mithilfe der systemeigenen (Datenbank-)Datentypen für Daten, die keinen Zeichendatentyp haben, und mithilfe von Unicode-Zeichen für Zeichendaten aus. Diese Option bietet ein besseres Leistungsverhalten als die Option -w
und sollte verwendet werden, um Daten mithilfe einer Datendatei zwischen SQL Server-Instanzen zu übertragen. Die Option fordert nicht für jedes Feld zu einer Eingabe auf. Verwenden Sie diese Option, wenn Sie Daten mit erweiterten ANSI-Zeichen übertragen und die Leistungsvorteile des einheitlichen Modus nutzen möchten.
Weitere Informationen finden Sie unter Verwenden des nativen Unicode-Formats zum Importieren oder Exportieren von Daten (SQL Server).
Wenn Sie Daten exportieren und dann unter Verwendung von bcp mit -N
importieren und eine Spalte mit Nicht-Unicode-Zeichen fester Länge vorliegt (z. B. char(10)), wird möglicherweise eine Warnung über abgeschnittene Daten angezeigt.
Die Warnung kann ignoriert werden. Eine Möglichkeit zum Auflösen dieser Warnung besteht darin, -n
anstelle von -N
zu verwenden.
-o output_file
Gibt den Namen einer Datei an, in die die Ausgabe geschrieben wird, die von der Eingabeaufforderung umgeleitet wurde.
Wenn output_file mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen zwischen -o
und dem Wert output_file kein Leerzeichen hinzu.
-P password
Gibt das Kennwort für die Anmelde-ID an. Wenn diese Option nicht verwendet wird, fordert der Befehl bcp zur Eingabe eines Kennworts auf. Wenn diese Option am Ende der Befehlszeile ohne Kennwort verwendet wird, verwendet bcp das Standardkennwort (NULL).
Wichtig
Verwenden Sie kein leeres Kennwort. Verwenden Sie ein sicheres Kennwort.
Zum Maskieren des Kennworts sollten Sie die Option -P
nicht in Verbindung mit der Option -U
verwenden. Drücken Sie stattdessen nach der Angabe von bcp mit der Option -U
und anderen Schaltern (geben Sie -P
nicht an) die EINGABETASTE. Sie werden daraufhin zur Angabe eines Kennworts aufgefordert. Durch diese Methode wird sichergestellt, dass das Kennwort bei der Eingabe maskiert wird.
Wenn password mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen zwischen -P
und dem Wert password kein Leerzeichen hinzu.
-q
Führt die Anweisung SET QUOTED_IDENTIFIER ON in der Verbindung zwischen dem Hilfsprogramm bcp und einer SQL Server-Instanz aus. Verwenden Sie diese Option, wenn Sie einen Datenbank-, Besitzer-, Tabellen- oder Sichtnamen angeben möchten, der ein Leerzeichen oder ein einfaches Anführungszeichen enthält. Schließen Sie den gesamten dreiteiligen Tabellen- oder Sichtnamen in Anführungszeichen ("") ein.
Um einen Datenbanknamen anzugeben, der ein Leerzeichen oder ein einfaches Anführungszeichen enthält, müssen Sie die Option -q
verwenden.
-q
gilt nicht für Werte, die an -d
übergeben wurden.
Weitere Informationen finden Sie weiter unten in diesem Artikel unter Hinweise.
-r row_term
Gibt das Zeilenabschlusszeichen an. Der Standardwert ist \n (Zeilenumbruchzeichen). Mit diesem Parameter können Sie das standardmäßige Zeilenabschlusszeichen überschreiben. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen (SQL Server).
Wenn Sie das Zeilenabschlusszeichen in Hexadezimalschreibweise in einem bcp-Befehl angeben, wird der Wert bei 0x00
abgeschnitten. Wenn Sie beispielsweise 0x410041
angeben, wird 0x41
verwendet.
Wenn row_term mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen zwischen -r
und dem Wert von row_term kein Leerzeichen hinzu.
-R
Gibt an, dass beim Massenkopieren von Währungs-, Datums- und Zeitdaten in SQL Server das Länderformat verwendet wird, das durch die Gebietsschemaeinstellung des Clientcomputers definiert wird. Standardmäßig werden Ländereinstellungen ignoriert.
-S server_name [\instance_name]
Gibt die SQL Server-Instanz an, mit der eine Verbindung hergestellt werden soll. Wenn kein Server angegeben wird, stellt das Hilfsprogramm bcp eine Verbindung mit der Standardinstanz von SQL Server auf dem lokalen Computer her. Diese Option ist erforderlich, wenn bcp von einem Remotecomputer im Netzwerk oder von einer lokalen benannten Instanz ausgeführt wird. Um eine Verbindung mit der Standardinstanz von SQL Server auf einem Server herzustellen, geben Sie lediglich Servernamean. Wenn Sie eine Verbindung mit einer benannten Instanz von SQL Server herstellen möchten, geben Sie server_name**\**instance_name an.
-t field_term
Gibt das Feldabschlusszeichen an. Der Standardwert ist \t (Tabstoppzeichen). Mit diesem Parameter können Sie das standardmäßige Feldabschlusszeichen überschreiben. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen (SQL Server).
Wenn Sie das Feldabschlusszeichen in Hexadezimalschreibweise in einem bcp-Befehl angeben, wird der Wert bei 0x00
abgeschnitten. Wenn Sie beispielsweise 0x410041
angeben, wird 0x41
verwendet.
Wenn field_term mit einem Bindestrich (-
) oder Schrägstrich (/
) beginnt, fügen zwischen -t
und dem Wert von field_term kein Leerzeichen hinzu.
-T
Gibt an, dass das Hilfsprogramm bcp die Verbindung mit SQL Server mithilfe integrierter Sicherheit über eine vertrauenswürdige Verbindung herstellt. Die Sicherheitsanmeldeinformationen des Netzwerkbenutzers (login_id und password) sind nicht erforderlich. Wenn -T
nicht angegeben wird, müssen Sie -U
und -P
angeben, um erfolgreich eine Verbindung herzustellen.
Wichtig
Wenn das Hilfsprogramm bcp die Verbindung mit SQL Server mithilfe integrierter Sicherheit über eine vertrauenswürdige Verbindung herstellt, verwenden Sie die Option -T
(vertrauenswürdige Verbindung) anstelle der Kombination aus Benutzername und Kennwort. Wenn das Hilfsprogramm bcp eine Verbindung mit SQL-Datenbank oder Azure Synapse Analytics herstellt, wird die Windows-Authentifizierung oder Microsoft Entra-Authentifizierung nicht unterstützt. Verwenden Sie die Optionen -U
und -P
.
-U login_id
Gibt die Anmelde-ID an, die zum Herstellen einer Verbindung mit SQL Serververwendet wird.
-v
Meldet die Versionsnummer und Copyrightinformationen des bcp -Hilfsprogramms.
-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160)
Führt den Massenkopiervorgang mithilfe von Datentypen aus einer früheren Version von SQL Serveraus. Diese Option fordert für keines der Felder zu einer Eingabe auf, sondern verwendet Standardwerte.
80
= SQL Server 2000 (8.x)90
= SQL Server 2005 (9.x)100
= SQL Server 2008 (10.0.x) und 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)
Verwenden Sie die Option -V80
, um beispielsweise Daten für Typen zu erstellen, die nicht von SQL Server 2000 (8.x)unterstützt werden, jedoch in spätere Versionen von SQL Serverintegriert wurden.
Weitere Informationen finden Sie unter Importieren von Daten aus früheren SQL Server-Versionen im nativen Format oder im Zeichenformat.
-w
Führt den Massenkopiervorgang mithilfe von Unicode-Zeichen aus. Diese Option fordert für keines der Felder zu einer Eingabe auf. Es werden folgende Einstellungen verwendet: nchar als Speichertyp, keine Präfixe, \t (Tabstoppzeichen) als Feldtrennzeichen und \n (Zeilenumbruchzeichen) als Zeilenabschlusszeichen. -w
ist nicht kompatibel mit -c
.
Weitere Informationen finden Sie unter Verwenden des Unicode-Zeichenformats zum Importieren und Exportieren von Daten (SQL Server).
-X
Diese Option wird zusammen mit den Optionen format
und -f
format_file verwendet und generiert eine XML-basierte Formatdatei anstelle der standardmäßigen Nicht-XML-Formatdatei. -x
funktioniert nicht beim Import oder Export von Daten. Bei Verwendung ohne format
und -f
format_file wird ein Fehler generiert.
Hinweise
Der Client für bcp 13.0 wird bei der Installation der Tools für Microsoft SQL Server 2019 (15.x) installiert. Wenn Tools für mehrere Versionen von SQL Server installiert sind, verwenden Sie, je nach Reihenfolge der Werte in der PATH-Umgebungsvariablen, möglicherweise den früheren bcp-Client anstelle des Clients für bcp 13.0. Diese Umgebungsvariable definiert die Verzeichnisse, in denen von Windows nach ausführbaren Dateien gesucht wird. Führen Sie an der Windows-Eingabeaufforderung den Befehl
bcp -v
aus, um die verwendete Version zu ermitteln. Weitere Informationen dazu, wie Sie den Befehlspfad in der PATH-Umgebungsvariablen festlegen, finden Sie unter Umgebungsvariablen. Alternativ können Sie die Windows-Hilfe nach „Umgebungsvariablen“ durchsuchen.Um sicherzustellen, dass die neueste Version des Hilfsprogramms bcp ausgeführt wird, müssen Sie alle älteren Versionen des Hilfsprogramms bcp entfernen.
Geben Sie an der Eingabeaufforderung Folgendes ein, um zu ermitteln, wo sämtliche Versionen des Hilfsprogramms bcp installiert sind:
where bcp.exe
Das Hilfsprogramm bcp kann auch separat aus dem Microsoft SQL Server 2016 Feature Pack heruntergeladen werden. Wählen Sie entweder
ENU\x64\MsSqlCmdLnUtils.msi
oderENU\x86\MsSqlCmdLnUtils.msi
aus.XML-Formatdateien werden nur unterstützt, wenn die SQL Server -Tools zusammen mit SQL Server Native Client installiert werden.
Informationen zum Speicherort und zum Verwenden des Hilfsprogramms bcp sowie zu den für Eingabeaufforderungs-Hilfsprogramme geltenden Syntaxkonventionen finden Sie unter Hilfsprogramme für die SQL-Eingabeaufforderung (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.
Verwenden zusätzlicher Sonderzeichen
Die Zeichen
<
,>
,|
,&
und^
sind spezielle Zeichen für die Befehlsshell. Ihnen muss ein Escapezeichen (^
) vorangestellt werden, oder sie müssen in Anführungszeichen gesetzt 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.
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 timestamp-Spalten
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 DatendateiCurrency Types.dat
erstellt:bcp AdventureWorks2022.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:
Angeben der Option
-q
.Einschließ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 | Wirkung |
---|---|
SQLCHAR oder SQLVARYCHAR | Die Daten werden in der Clientcodepage 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. |
Berechtigungen
Für den Vorgang bcp out
ist die Berechtigung SELECT für die Quelltabelle erforderlich.
Für den Vorgang bcp in
sind mindestens SELECT/INSERT-Berechtigungen für die Zieltabelle erforderlich. Darüber hinaus sind ALTER TABLE-Berechtigungen erforderlich, wenn eine der folgenden Bedingungen zutrifft:
Einschränkungen sind vorhanden, und der Hinweis CHECK_CONSTRAINTS ist nicht angegeben.
Hinweis
Die Deaktivierung von Einschränkungen wurde als Standardverhalten festgelegt. Um Einschränkungen explizit zu aktivieren, verwenden Sie die Option
-h
mit dem Hinweis CHECK_CONSTRAINTS.Trigger sind vorhanden, und der Hinweis FIRE_TRIGGER ist nicht angegeben.
Hinweis
Standardmäßig werden Trigger nicht ausgelöst. Um Trigger explizit zu aktivieren, verwenden Sie die Option
-h
mit dem Hinweis FIRE_TRIGGER.Mithilfe der Option
-E
importieren Sie Identitätswerte aus einer Datendatei.
Hinweis
ALTER TABLE-Berechtigungen für die Zieltabelle sind erst seit SQL Server 2005 (9.x)erforderlich. Diese neue Anforderung kann dazu führen, dass bcp-Skripts, die keine Trigger und Einschränkungsüberprüfungen erzwingen, einen Fehler erzeugen, wenn das Benutzerkonto nicht über ALTER TABLE-Berechtigungen für die Zieltabelle verfügt.
Bewährte Methoden für Zeichenmodus (-c
) und einheitlichen Modus (-n
)
Dieser Abschnitt bietet Empfehlungen für den Zeichenmodus (-c
) und einheitlichen 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 mit der Option-c
oder-w
aus SQL Server, wenn die Daten in eine Nicht-SQL Server -Datenbank importiert werden.(Administrator) überprüfen Sie Daten, wenn Sie BCP OUT verwenden. Wenn Sie z. B. BCP OUT, BCP IN und dann BCP OUT verwenden, überprüfen Sie, ob die Daten ordnungsgemäß exportiert werden, und ob die Abschlusszeichenwerte 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
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.
Das folgende Skript erstellt eine leere Kopie der Tabelle WideWorldImporters.Warehouse.StockItemTransactions
und fügt dann eine Primärschlüsseleinschränkung hinzu. Führen Sie das folgende T-SQL-Skript in SQL Server Management Studio (SSMS) aus.
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;
A. Identifizieren der Version des Hilfsprogramms bcp
Geben Sie folgenden Befehl an der Eingabeaufforderung 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.bcp
erstellt, und die Tabellendaten werden mithilfe eines Zeichenformats in die Datendatei kopiert.Geben Sie folgenden Befehl an der Eingabeaufforderung 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.Geben Sie folgenden Befehl an der Eingabeaufforderung 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 -T
Informieren Sie sich unter 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.Geben Sie folgenden Befehl an der Eingabeaufforderung 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. Im Beispiel werden auch der HinweisTABLOCK
, die Batchgröße, die maximale Anzahl von Syntaxfehlern, eine Fehlerdatei und eine Ausgabedatei angegeben.Geben Sie folgenden Befehl an der Eingabeaufforderung 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 -T
Informieren Sie sich unter
Error_in.log
undOutput_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.
Geben Sie folgenden Befehl an der Eingabeaufforderung 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 den Kontakt Amy Trefl
aus der WideWorldImporters.Application.People
-Tabelle in eine Datendatei Amy_Trefl_c.bcp
kopiert.
Hinweis
Der Schalter -d
wird zum Bestimmen der Datenbank verwendet.
Geben Sie folgenden Befehl an der Eingabeaufforderung 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.
Geben Sie folgenden Befehl an der Eingabeaufforderung 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 folgende Befehle an der Eingabeaufforderung 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
Um die Option -x
zu verwenden, müssen Sie über einen bcp 9.0-Client verfügen. Informationen zum Verwenden des bcp 9.0-Clients finden Sie unter „Hinweise“.
Weitere Informationen finden Sie unter Nicht-XML-Formatdateien verwenden (SQL Server) und XML-Formatdateien (SQL Server).
I. 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.bcp
in eine Kopie der Warehouse.StockItemTransactions_bcp
-Tabelle massenkopiert, wobei die zuvor erstellte Formatdatei StockItemTransactions_c.xml
verwendet wird.
Hinweis
Der Schalter -L
wird verwendet, um nur die ersten 100 Datensätze zu importieren.
Geben Sie folgenden Befehl an der Eingabeaufforderung 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,ID
undName
.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
Generieren Sie eine Ausgabedatei aus der Beispieltabelle
dbo.T1
mithilfe eines benutzerdefinierten Feldabschlusszeichens.In diesem Beispiel lautet
MYSERVER
der Servername, und das benutzerdefinierte Feldabschlusszeichen wird durch-t ,
angegeben.bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t ,
Hier sehen Sie das Ergebnis.
1,Natalia 2,Mark 3,Randolph
Generieren Sie eine Ausgabedatei aus der Beispieltabelle
dbo.T1
mithilfe eines benutzerdefinierten Feld- und Zeilenabschlusszeichens.In diesem Beispiel lautet der Servername
MYSERVER
, das benutzerdefinierte Feldabschlusszeichen wird von-t
, ` angegeben, und das benutzerdefinierte Zeilenabschlusszeichen wird durch-r :
angegeben.bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t , -r :
Hier sehen Sie 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 und 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)
Formatdateien zum Importieren oder Exportieren von Daten (SQL Server)
- Erstellen einer Formatdatei (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)
Überlegungen und Einschränkungen
- Das Hilfsprogramm bcp weist die Einschränkung auf, dass die Fehlermeldung nur 512-Byte-Zeichen anzeigt. Nur die ersten 512 Byte der Fehlermeldung werden angezeigt.
Zugehöriger Inhalt
- Vorbereiten von Daten für den Massenexport oder -import
- BULK INSERT (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-Stapelaustausch (tag sql-server): Stellen von Fragen zu SQL Server
- Stack Overflow (tag sql-server): Antworten auf SQL-Entwicklungsfragen
- Reddit: allgemeine Erläuterung zu SQL Server
- Lizenzbedingungen und -informationen zu Microsoft SQL Server
- Supportoptionen für Geschäftsbenutzer
- Microsoft kontaktieren
- Zusätzliche SQL Server-Hilfe und Feedback
Zur SQL-Dokumentation beitragen
Wussten Sie schon, dass Sie SQL-Inhalte selbst bearbeiten könnten? Hierdurch helfen Sie nicht nur mit, unsere Dokumentation zu verbessern, sondern Sie werden auch als Mitwirkender an der Seite aufgeführt.
Weitere Informationen finden Sie unter Mitwirken an der SQL Server-Dokumentation.