bcp (Hilfsprogramm)
Mit dem Hilfsprogramm bcp werden Daten zwischen einer Microsoft SQL Server-Instanz und einer Datendatei in einem benutzerdefinierten Format kopiert. 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 in 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.
Syntaxkonventionen für die bcp-Syntax finden Sie unter Transact-SQL-Syntaxkonventionen (Transact-SQL).
Hinweis |
|---|
Wenn Sie bcp zum Sichern Ihrer Daten verwenden, müssen Sie eine Formatdatei zum Aufzeichnen des Datenformats erstellen. bcp-Datendateien umfassen keine Schema- oder Formatinformationen. Wenn eine Tabelle oder Sicht gelöscht wird und Sie über keine Formatdatei verfügen, können Sie die Daten unter Umständen nicht importieren. |
bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-mmax_errors] [-fformat_file] [-x] [-eerr_file]
[-Ffirst_row] [-Llast_row] [-bbatch_size]
[-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )]
[-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term]
[-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
[-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
[-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]
Der bcp 10.0-Client wird bei der Installation der MicrosoftSQL Server 2008 R2-Tools installiert. Wenn sowohl für SQL Server 2008 R2 als auch für SQL Server 2005 Tools installiert wurden, verwenden Sie möglicherweise anstatt des bcp 10.0-Clients die frühere Version des bcp-Clients. Dies wird durch den Wert der PATH-Umgebungsvariablen bestimmt. Diese Umgebungsvariable definiert die Verzeichnisse, in denen von Windows nach ausführbaren Dateien gesucht wird. Führen Sie an der Windows-Befehlszeile den Befehl bcp/v aus, um zu ermitteln, welche Version Sie verwenden. Informationen zum Festlegen des Befehlspfads in der PATH-Umgebungsvariablen finden Sie in der Windows-Hilfe.
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 über die für Eingabeaufforderungs-Hilfsprogramme geltende Syntaxkonventionen finden Sie unter Eingabeaufforderungs-Hilfsprogramme.
Informationen zur Vorbereitung 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.
Systemeigene Datendateiunterstützung
In SQL Server 2008 R2 unterstützt das bcp-Hilfsprogramm nur systemeigene Datendateien, die mit SQL Server 2000, SQL Server 2005, SQL Server 2008 und SQL Server 2008 R2 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 mit Leerzeichen oder Anführungszeichen
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.dat erstellt:
bcp AdventureWorks2008R2.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.
-
Datenüberprüfung
bcp erzwingt nun Datenüberprüfungen, die dazu führen können, dass Skripts einen Fehler erzeugen, wenn sie für ungültige Daten in einer Datendatei ausgeführt werden. So wird durch bcp jetzt Folgendes überprüft:
-
Die systemeigene 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.
Massenexportieren und -importieren 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. |
Um bcp out ausführen zu können, sind SELECT-Berechtigungen für die Quelltabelle erforderlich.
Um bcp in ausführen zu können, sind mindestens SELECT/INSERT-Berechtigungen für die Zieltabelle erforderlich. Darüber hinaus sind ALTER TABLE-Berechtigungen erforderlich, wenn eine der folgenden Bedingungen zutrifft:
-
Es sind Einschränkungen vorhanden, und der CHECK_CONSTRAINTS-Hinweis wurde nicht angegeben.
Hinweis
Die Deaktivierung von Einschränkungen wurde als Standardverhalten festgelegt. Verwenden Sie die Option -h mit dem CHECK_CONSTRAINTS-Hinweis, wenn Einschränkungen explizit aktiviert werden sollen.
-
Es sind Trigger vorhanden, und der FIRE_TRIGGER-Hinweis wurde nicht angegeben.
Hinweis
Standardmäßig werden Trigger nicht ausgelöst. Verwenden Sie die Option -h mit dem FIRE_TRIGGERS-Hinweis, wenn Trigger explizit ausgelöst werden sollen.
-
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 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. |
Dieser Abschnitt enthält Empfehlungen für den Zeichenmodus (-c) und den systemeigenen Modus (-n).
-
(Administrator/Benutzer) Sofern möglich, verwenden Sie das einheitliche Format (-n), um das Trennzeichenproblem zu umgehen. Verwenden Sie das einheitliche Format, um mit SQL Server zu exportieren und zu importieren. Exportieren Sie Daten aus SQL Server mit den Optionen -c oder -w, wenn die Daten in eine Nicht-SQL Server-Datenbank importiert werden.
-
(Administrator) Überprüfen Sie Daten bei der Verwendung von BCP OUT. Wenn Sie BCP OUT, BCP IN und anschließend BCP OUT verwenden, überprüfen Sie, ob die Daten korrekt exportiert werden und die Abschlusszeichenwerte nicht als Teil eines Datenwerts verwendet werden. Überschreiben Sie zum Schutz vor Konflikten zwischen Abschlusszeichenwerten und Datenwerten die standardmäßigen Abschlusszeichen (mit den Optionen -t und -r) mit zufälligen hexadezimalen Werten.
-
(Benutzer) Verwenden Sie ein langes und eindeutiges Abschlusszeichen (eine beliebige Byte- oder Zeichenfolge), um die Möglichkeit eines Konflikts mit dem tatsächlichen Zeichenfolgenwert zu minimieren. Dies kann durch Verwenden der Optionen -t und -r erfolgen.
Dieser Abschnitt enthält die folgenden Beispiele:
-
A. Kopieren von Tabellenzeilen in eine Datendatei (mit einer vertrauenswürdigen Verbindung)
-
B. Kopieren von Tabellenzeilen in eine Datendatei (mit Authentifizierung im gemischten Modus)
-
C. Kopieren von Daten aus einer Datei in eine Tabelle
-
D. Kopieren einer bestimmten Spalte in eine Datendatei
-
E. Kopieren einer bestimmten Zeile in eine Datendatei
-
F. Kopieren von Daten aus einer Abfrage in eine Datendatei
-
G. Erstellen einer Formatdatei, die nicht das Format XML aufweist
-
H. Erstellen einer XML-Formatdatei
-
I. Verwenden einer Formatdatei für einen Massenimport mithilfe von bcp
A. Kopieren von Tabellenzeilen in eine Datendatei (mit einer vertrauenswürdigen Verbindung)
Im folgenden Beispiel wird die Verwendung der Option out anhand der AdventureWorks2008R2.Sales.Currency-Tabelle veranschaulicht. In diesem Beispiel wird die Datendatei Currency.dat erstellt, und die Tabellendaten werden mithilfe eines Zeichenformats in die Datendatei kopiert. Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie folgenden Befehl an der Eingabeaufforderung ein:
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -T -c
B. Kopieren von Tabellenzeilen in eine Datendatei (mit Authentifizierung im gemischten Modus)
Im folgenden Beispiel wird die Verwendung der Option out anhand der Sales.Currency-Tabelle veranschaulicht. In diesem Beispiel wird die Datendatei Currency.dat erstellt, und die Tabellendaten werden mithilfe eines Zeichenformats in die Datendatei kopiert.
Bei diesem Beispiel wird vorausgesetzt, dass Sie die Authentifizierung im gemischten Modus verwenden. Sie müssen daher den Schalter -U verwenden, um die Anmelde-ID anzugeben. 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.
bcp AdventureWorks2008R2.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>
Das System fordert Sie zur Eingabe des Kennworts auf.
C. Kopieren von Daten aus einer Datei in eine Tabelle
Im folgenden Beispiel wird die Verwendung der Option in anhand der Datei veranschaulicht, die im vorherigen Beispiel erstellt wurde (Currency.dat). Zuerst wird in diesem Beispiel jedoch eine leere Kopie der Sales.Currency-Tabelle (Sales.Currency2) erstellt, in die die Daten kopiert werden. Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie den folgenden Befehl im Abfrage-Editor ein, um die leere Tabelle zu erstellen:
USE AdventureWorks2008R2; GO SELECT * INTO AdventureWorks2008R2.Sales.Currency2 FROM AdventureWorks2008R2.Sales.Currency WHERE 1=2
Geben Sie den folgenden Befehl an der Eingabeaufforderung ein, um die Zeichendaten per Massenvorgang in die neue Tabelle zu kopieren (d. h. um die Daten zu importieren):
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -c
Zeigen Sie den Inhalt der Tabelle im Abfrage-Editor ein und geben Sie Folgendes ein, um zu überprüfen, ob der Befehl erfolgreich ausgeführt wurde:
USE AdventureWorks2008R2; GO SELECT * FROM Sales.Currency2;
D. 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 Name-Spalte der Sales.Currency-Tabelle in eine Datendatei kopiert. Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie an der Windows-Eingabeaufforderung Folgendes ein:
bcp "SELECT Name FROM AdventureWorks2008R2.Sales.Currency" queryout Currency.Name.dat -T -c
E. 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 Jarrod Rana aus der Person.Person-Tabelle in eine Datendatei (Jarrod Rana.dat) kopiert.Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie an der Windows-Eingabeaufforderung Folgendes ein:
bcp "SELECT * FROM AdventureWorks2008R2.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' " queryout "Jarrod Rana.dat" -T -c
F. Kopieren von Daten aus einer Abfrage in eine Datendatei
Zum Kopieren des Resultsets einer Transact-SQL-Anweisung in eine Datendatei verwenden Sie die Option queryout. Im folgenden Beispiel werden die Namen aus der AdventureWorks2008R2.Person.Person-Tabelle nach Nachnamen und dann nach Vornamen geordnet in die Datendatei Contacts.txt kopiert. Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie an der Windows-Eingabeaufforderung Folgendes ein:
bcp "SELECT FirstName, LastName FROM AdventureWorks2008R2.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T
G. Erstellen einer Formatdatei, die nicht das Format XML aufweist
Im folgenden Beispiel wird die Nicht-XML-Formatdatei Currency.fmt für die Sales.Currency-Tabelle in der AdventureWorks2008R2-Datenbank erstellt. Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie an der Windows-Eingabeaufforderung Folgendes ein:
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -f Currency.fmt
Weitere Informationen finden Sie unter Grundlegendes zu Nicht-XML-Formatdateien.
H. Erstellen einer XML-Formatdatei
In dem folgenden Beispiel wird die XML-Formatdatei Currency.xml für die Sales.Currency-Tabelle in der AdventureWorks2008R2-Datenbank erstellt. Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie an der Windows-Eingabeaufforderung Folgendes ein:
bcp AdventureWorks2008R2.Sales.Currency format nul -T -c -x -f Currency.xml
Hinweis |
|---|
Wenn Sie die Option -x verwenden möchten, 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 Grundlegendes zu XML-Formatdateien.
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 Currency.dat in eine Kopie der Sales.Currency-Tabelle (Sales.Currency2) massenkopiert, wobei die zuvor erstellte Formatdatei Currency.xml verwendet wird. Bei diesem Beispiel wird vorausgesetzt, dass Sie die Windows-Authentifizierung verwenden und über eine vertrauenswürdige Verbindung mit der Serverinstanz verfügen, auf der Sie bcp ausführen.
Geben Sie an der Windows-Eingabeaufforderung Folgendes ein:
bcp AdventureWorks2008R2.Sales.Currency2 in Currency.dat -T -f Currency.xml
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. |
Die folgenden Themen enthalten Beispiele zur Verwendung von bcp:
-
Beispiele für den Massenimport und -export von XML-Dokumenten
-
Beibehalten von Identitätswerten beim Massenimport von Daten
-
Beibehalten von NULL-Werten oder Verwenden von Standardwerten während des Massenimports
-
Verwenden des Zeichenformats zum Importieren und Exportieren von Daten
-
Verwenden des systemeigenen Formats zum Importieren oder Exportieren von Daten
-
Verwenden des Unicode-Zeichenformats zum Importieren und Exportieren von Daten
-
Verwenden des systemeigenen Unicode-Formats zum Importieren oder Exportieren von Daten
