bcp (Dienstprogramm)

Aktualisiert: 12. Dezember 2006

Mit dem Dienstprogramm bcp werden Daten zwischen einer Microsoft SQL Server 2005-Instanz und einer Datendatei in einem benutzerdefinierten Format kopiert. Das Dienstprogramm 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 Dienstprogramm 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.

Themenlink (Symbol) Informationen zu den Syntaxkonventionen von bcp finden Sie unter Eingabeaufforderungs-Dienstprogramme.

Syntax

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-n] [-c] [-N] [-w] [-V (60 | 65 | 70 | 80)] [-6] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-Sserver_name[\instance_name]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

Argumente

  • database_name
    Der Name der Datenbank, in der die angegebene Tabelle oder Sicht vorhanden ist. Wenn kein Name angegeben ist, wird diese Datenbank als Standarddatenbank des Benutzers verwendet.
  • owner
    Der Name des Besitzers der Tabelle oder Sicht. ownerist optional, wenn der Benutzer, der den Vorgang ausführt, Besitzer der angegebenen Tabelle oder Sicht ist. Wenn ownernicht angegeben wird und der Benutzer, der den Vorgang ausführt, nicht Besitzer der angegebenen Tabelle oder Sicht ist, gibt SQL Server 2005 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 Name 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 Name 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 (Transact-SQL).
  • "query"
    Eine Transact-SQL-Abfrage, die ein Resultset zurückgibt. Wenn die Abfrage mehrere Resultsets zurückgibt, wie z. B. eine SELECT-Anweisung, die eine COMPUTE-Klausel angibt, wird nur das erste Resultset in die Datendatei kopiert; alle weiteren Resultsets werden ignoriert. Setzen Sie die jeweilige Abfrage in doppelte Anführungszeichen und alle in die Abfrage eingebetteten Elemente in einfache Anführungszeichen. Außerdem muss queryout angegeben werden, wenn über eine Abfrage ein Massenkopieren von Daten erfolgt.
  • in | out | queryout | format
    Gibt die Richtung des Massenkopierens wie folgt an:

    • Mit in werden Daten aus einer Datei in die Datenbanktabelle oder -sicht kopiert.
      ms162802.note(de-de,SQL.90).gifHinweis:
      Das Dienstprogramm bcp, das mit SQL Server 6.5 bereitgestellt wird, bietet keine Unterstützung für das Massenkopieren in Tabellen, die den Datentyp sql_variant oder bigint enthalten.
    • Mit out werden Daten aus der Datenbanktabelle oder -sicht in eine Datei kopiert. Beachten Sie, dass das Dienstprogramm bcp beim Extrahieren von Daten leere Zeichenfolgen als NULL-Zeichenfolgen und NULL-Zeichenfolgen als leere Zeichenfolgen darstellt.
    • Mit queryout werden Daten aus einer Abfrage kopiert. Diese Option muss nur beim Massenkopieren von Daten über eine Abfrage angegeben werden.
    • Mit format wird eine Formatdatei basierend auf der angegebenen Option (-n, -c, -w, -6 oder -N) und den Tabellen- oder Sichttrennzeichen erstellt. Beim Massenkopieren von Daten kann der Befehl bcp auf eine Formatdatei verweisen. Hierdurch können Sie die wiederholte interaktive Eingabe von Formatinformationen vermeiden. 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.
  • data_file
    Der vollständige Pfad der Datendatei. Wenn Daten in SQL Server massenimportiert werden, enthält die Datendatei die Daten, die in die angegebene Tabelle oder Sicht kopiert werden sollen. Beim Massenexportieren aus SQL Server enthä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.147.483.647 Zeilen enthalten.

    ms162802.note(de-de,SQL.90).gifWichtig:
    Wenn Sie die Option format verwenden, müssen Sie nul als Wert für data_file (formatnul) angeben.
  • -mmax_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_errors schließt alle Fehler aus, die nur auf dem Server erkannt werden können, z. B. Einschränkungsverletzungen.

    Eine Zeile, die von bcp nicht kopiert werden kann, wird ignoriert und als ein Fehler gezählt. Wenn diese Option nicht enthalten ist, wird der Standardwert 10 verwendet.

    ms162802.note(de-de,SQL.90).gifHinweis:
    Die Option -m gilt nicht für die Konvertierung der Datentypen money und bigint.
  • -fformat_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 Option format verwendet, wird die mit format_file 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.
    • Wird -f mit der Option in oder out verwendet, ist eine bereits vorhandene Formatdatei erforderlich.
      ms162802.note(de-de,SQL.90).gifHinweis:
      Die Verwendung einer Formatdatei mit der Option in oder out ist optional. Fehlt -f, und wurde -n, -c, -w, -6 oder -N nicht angegeben, werden Sie von dem Befehl zur Angabe von Formatinformationen aufgefordert und erhalten die Möglichkeit, Ihre Antworten in einer Formatdatei (der Standardname ist Bcp.fmt) zu speichern.
  • -x
    Wird diese Option mit den Optionen format und -fformat_file verwendet, wird eine XML-basierte Formatdatei anstelle der standardmäßig erstellten Nicht-XML-Formatdatei generiert. Beim Importieren oder Exportieren von Daten hat -x keine Funktion. Wird die Option weder mit format noch mit -fformat_file verwendet, wird ein Fehler generiert.

    ms162802.note(de-de,SQL.90).gifHinweis:
    Um die Option -x verwenden zu können, müssen Sie über einen bcp 9.0-Client verfügen. Informationen zum Verwenden des bcp 9.0-Clients finden Sie unter "Hinweise" weiter unten in diesem Thema.
  • -eerr_file
    Gibt den vollständigen Pfad einer Fehlerdatei an, in der alle Zeilen gespeichert werden, die das Dienstprogramm bcp nicht von der Datei in die Datenbank übertragen kann. Die von bcp generierten Fehlermeldungen werden an die Arbeitsstation des Benutzers gesendet. Wenn diese Option nicht verwendet wird, wird keine Fehlerdatei erstellt.
  • -Ffirst_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.
  • -Llast_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.
  • -bbatch_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. Sollen die Zeilen auf mehrere Batches aufgeteilt werden, müssen Sie mit batch_size eine Batchgröße angeben, 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 durch Transaktionen importiert wurden, für die bereits ein Commit ausgeführt wurde, wirken sich spätere Fehler nicht aus.

    Verwenden Sie diese Option nicht in Verbindung mit der Option **h"**ROWS_PER_BATCH =bb".

    Weitere Informationen finden Sie unter Verwalten von Batches für den Massenimport.

  • -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 (Neue-Zeile-Zeichen) als Zeilenabschlusszeichen.

    Weitere Informationen finden Sie unter Verwenden des Zeichenformats zum Importieren und Exportieren von Daten.

  • -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 systemeigenen Modus nutzen möchten. -N kann in SQL Server 6.5 oder früheren Versionen nicht verwendet werden.

    Weitere Informationen finden Sie unter Verwenden des systemeigenen Unicode-Formats zum Importieren oder Exportieren von Daten.

  • -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 (Neue-Zeile-Zeichen) als Zeilenabschlusszeichen. Diese Option kann in SQL Server 6.5 oder früheren Versionen nicht verwendet werden.

    Weitere Informationen finden Sie unter Verwenden des Unicode-Zeichenformats zum Importieren und Exportieren von Daten.

  • -V ( 60| 65| 70| 80)
    Führt den Massenkopiervorgang mithilfe von Datentypen aus einer früheren Version von SQL Server aus. Diese Option fordert nicht für jedes Feld zu einer Eingabe auf. Es werden die Standardwerte verwendet. Wenn Sie beispielsweise Datumsformate, die von der mit SQL Server 6.5 bereitgestellten Version des Dienstprogramms bcp (jedoch nicht mehr von ODBC) unterstützt werden, in SQL Server 2005 massenkopieren möchten, müssen Sie den -V65-Parameter verwenden.

    ms162802.note(de-de,SQL.90).gifWichtig:
    Wenn Daten von SQL Server in eine Datendatei massenkopiert werden, generiert bcp keine SQL Server 6.0- oder SQL Server 6.5-Datumsformate für datetime- oder smalldatetime-Daten, und zwar auch dann nicht, wenn -V angegeben wurde. Daten werden immer im ODBC-Format geschrieben. Außerdem wird jeder NULL-Wert in einer bit-Spalte als Wert 0 geschrieben, da SQL Server 6.5 und frühere Versionen die NULL-Zulässigkeit bei bit-Daten nicht unterstützen.

    Weitere Informationen finden Sie unter Importieren von Daten aus früheren SQL Server-Versionen im systemeigenen Format oder im Zeichenformat.

  • -6
    Führt den Massenkopiervorgang mithilfe von SQL Server 6.0- oder SQL Server 6.5-Datentypen aus. Diese Option wird nur unterstützt, um die Kompatibilität mit früheren Versionen sicherzustellen. Für SQL Server, Version 7 und höher, verwenden Sie stattdessen die Option -V.
  • -q
    Führt die SET QUOTED_IDENTIFIERS ON-Anweisung in der Verbindung zwischen dem Dienstprogramm 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.

    Weitere Informationen finden Sie unter "Hinweise" weiter unten in diesem Thema.

  • -C { ACP | OEM | RAW | code_page }
    Wird unterstützt, um die Kompatibilität mit früheren Versionen von SQL Server sicherzustellen. Für SQL Server, Version 7.0 und höher, Microsoft wird empfohlen, in einer Formatdatei einen Sortierungsnamen für jede Spalte anzugeben.

    Gibt die Codepage für die in der Datendatei enthaltenen Daten an. code_page ist nur dann von Bedeutung, wenn die Daten Spalten vom Datentyp char, varchar oder text mit Zeichenwerten enthalten, die größer als 127 oder kleiner als 32 sind.

    Codepagewert Beschreibung

    ACP

    ANSI/MicrosoftWindows (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.

    code_page

    Bestimmte Codepagenummer, z. B. 850.

    Weitere Informationen finden Sie unter Kopieren von Daten zwischen unterschiedlichen Sortierungen.

  • -tfield_term
    Gibt das Feldabschlusszeichen an. Das Standardzeichen ist \t (Tabstoppzeichen). Mit diesem Parameter können Sie das standardmäßige Feldabschlusszeichen außer Kraft setzen. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen.
  • -rrow_term
    Gibt das Zeilenabschlusszeichen an. Das Standardzeichen ist \n (Neue-Zeile-Zeichen). Mit diesem Parameter können Sie das standardmäßige Zeilenabschlusszeichen außer Kraft setzen. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen.
  • -iinput_file
    Gibt den Namen einer Antwortdatei an, die für jedes Feld die Antwort enthält, die während eines Massenkopiervorgangs im interaktiven Modus auf die an der Eingabeaufforderung gestellten Fragen gegeben wurde (-n, -c, -w, -6 oder -N wurde nicht angegeben).
  • -ooutput_file
    Gibt den Namen einer Datei an, in die die Ausgabe geschrieben wird, die von der Eingabeaufforderung umgeleitet wurde.
  • -apacket_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 außer Kraft gesetzt werden. packet_size kann einen Wert von 4096 bis 65535 Byte annehmen. Der Standardwert ist 4096.

    Durch einen höheren Wert für die Paketgröße kann die Leistung von Massenkopiervorgängen verbessert werden. Wenn eine größere Paketgröße angefordert, aber nicht erteilt wird, wird die Standardeinstellung verwendet. Die vom Dienstprogramm bcp generierte Leistungsstatistik zeigt die verwendete Paketgröße an.

  • -Sserver_name[ **\instance_name]
    Gibt die SQL Server-Instanz an, mit der eine Verbindung hergestellt wird. Wenn kein Server angegeben wird, stellt das Dienstprogramm 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 server_name an. Um eine Verbindung mit einer benannten Instanz von SQL Server 2005 herzustellen, geben Sie server_name
    \**instance_name an.
  • -Ulogin_id
    Gibt die Anmelde-ID an, die zum Herstellen einer Verbindung mit SQL Server verwendet wird.

    ms162802.security(de-de,SQL.90).gifSicherheitshinweis:
    Wenn das Dienstprogramm 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 user name und password.
  • -Ppassword
    Gibt das Kennwort für die Anmelde-ID an. Wenn diese Option nicht verwendet wird, werden Sie vom Befehl bcp zur Angabe eines Kennwortes aufgefordert. Wenn diese Option am Ende der Befehlszeile ohne Kennwort verwendet wird, verwendet bcp das Standardkennwort (NULL).

    ms162802.security(de-de,SQL.90).gifSicherheitshinweis:
    Lassen Sie das Kennwortfeld nicht leer. Verwenden Sie ein sicheres Kennwort.

    Zum Maskieren des Kennwortes 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 Kennwortes aufgefordert. Durch diese Methode ist sichergestellt, dass das Kennwort bei der Eingabe maskiert wird.

  • -T
    Gibt an, dass das Dienstprogramm bcp die Verbindung mit SQL Server mithilfe integrierter Sicherheit über eine vertrauenswürdige Verbindung herstellt. Die Anmeldeinformationen des Netzwerkbenutzers (login_id und password) sind nicht erforderlich. Wenn -T nicht angegeben wird, müssen Sie -U und -P angeben, um sich erfolgreich anzumelden.
  • -v
    Meldet die Versionsnummer und das Copyright für das Dienstprogramm bcp.
  • -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.
  • -E
    Gibt an, dass der oder die Identitätswerte in der importierten Datendatei für die Identitätsspalte verwendet werden soll(en). Wenn -E nicht angegeben wird, werden die Identitätswerte für diese Spalte in der zu importierenden Datendatei ignoriert. SQL Server 2005 weist automatisch eindeutige Werte zu, basierend auf den Ausgangswerten und den inkrementellen Werten, die beim Erstellen der Tabelle angegeben wurden.

    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 2005 weist der Spalte automatisch eindeutige Werte zu. Weitere Informationen finden Sie unter DBCC CHECKIDENT (Transact-SQL).

    Für die Option -E sind besondere Berechtigungen erforderlich. Weitere Informationen finden Sie unter "Hinweise" weiter unten in diesem Thema.

    Weitere Informationen zum Beibehalten von Identitätswerten finden Sie unter Beibehalten von Identitätswerten beim Massenimport von Daten.

  • **-h"**hint[ ,... n] "
    Gibt den oder die Hinweise an, die beim Massenimportieren von Daten in eine Tabelle oder Sicht verwendet werden sollen. Diese Option kann nicht beim Massenkopieren von Daten in SQL Server 6.x oder frühere Versionen verwendet werden.

    • 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, d. h. nicht nach einem gruppierten Indexschlüssel sortiert ist, oder wenn es keinen gruppierten Index für die Tabelle gibt, 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 jeweilige Datendatei nicht sortiert ist. Beim optimierten Massenimport wird in SQL Server auch überprüft, ob die importierten Daten sortiert sind.

      Weitere Informationen finden Sie unter Steuern der Sortierreihenfolge beim Massenimport von Daten.

    • ROWS_PER_BATCH **=**bb
      Die Anzahl der 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 von bb. Standardmäßig ist ROWS_PER_BATCH unbekannt.

      Weitere Informationen finden Sie unter Verwalten von Batches für den Massenimport.

    • KILOBYTES_PER_BATCH = cc
      Die ungefähre Anzahl von Kilobytes (KB) an Daten pro Batch (als cc). Standardmäßig ist KILOBYTES_PER_BATCH unbekannt.

      Weitere Informationen finden Sie unter Verwalten von Batches für den Massenimport.

    • TABLOCK
      Gibt an, dass eine Massenaktualisierungssperre 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 bestimmt.

      Weitere Informationen finden Sie unter Steuern des Sperrverhaltens für den Massenimport.

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

      ms162802.note(de-de,SQL.90).gifHinweis:
      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, überschreitet der Aufwand der erneuten Überprüfung möglicherweise denjenigen der Anwendung von CHECK-Einschränkungen auf die inkrementellen Daten. 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 Transact-SQL-Anweisungen verwenden, um ungültige Daten zu entfernen.

      ms162802.note(de-de,SQL.90).gifHinweis:
      In SQL Server 2005 erzwingt bcp neue Datenüberprüfungen, die dazu führen können, dass vorhandene Skripts einen Fehler erzeugen, wenn sie für ungültige Daten in einer Datendatei ausgeführt werden.
      ms162802.note(de-de,SQL.90).gifHinweis:
      Der Schalter -mmax_errors gilt nicht für die Einschränkungsüberprüfung.

      Weitere Informationen finden Sie unter Steuern der Einschränkungsüberprüfung mithilfe von Massenimportvorgängen.

    • FIRE_TRIGGERS
      Wird mit dem in-Argument angegeben und bewirkt, dass jeder INSERT-Trigger, der für die Zieltabelle definiert ist, während des Massenkopiervorgangs ausgeführt wird. Wenn FIRE_TRIGGERS nicht angegeben wird, werden keine INSERT-Trigger ausgeführt. FIRE_TRIGGERS wird für die Argumente out, queryout und format ignoriert.

      Weitere Informationen finden Sie unter Steuern der Triggerausführung beim Massenimport von Daten.

Hinweise

Der bcp 9.0-Client wird zusammen mit den Microsoft SQL Server-Tools auf dem Computer installiert. Wenn sowohl SQL Server 2005- als auch SQL Server 2000-Tools installiert sind, verwenden Sie möglicherweise anstatt des bcp 9.0-Clients die frühere Version des bcp-Clients. Dies wird durch den Wert der PATH-Umgebungsvariable bestimmt. Diese Umgebungsvariable definiert die Verzeichnisse, in denen von Windows nach ausführbaren Dateien gesucht wird. Führen Sie an der Eingabeaufforderung den Befehl bcp/v aus, um zu ermitteln, welche Version Sie verwenden. Informationen zum Festlegen des Befehlspfades in der PATH-Umgebungsvariablen finden Sie in der Windows-Hilfe.

Dateien im Format XML werden nur unterstützt, wenn die SQL Server-Tools zusammen mit SQL Native Client installiert werden.

Informationen zum Speicherort und zum Verwenden des Dienstprogramms bcp sowie über die für Eingabeaufforderungs-Dienstprogramme geltende Syntaxkonventionen finden Sie unter Eingabeaufforderungs-Dienstprogramme.

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.

Berechnete Spalten und timestamp-Spalten

In einer zu importierenden Datendatei enthaltene Werte für berechnete oder timestamp-Spalten werden ignoriert. SQL Server 2005 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 AdventureWorks.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

In SQL Server 2005 erzwingt bcp neue Datenüberprüfungen, die dazu führen können, dass vorhandene 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.
  • Das Vorhandensein eines geraden Wertes für die Bytelänge bei Unicode-Daten.

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.

Berechtigungen

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.
    ms162802.note(de-de,SQL.90).gifHinweis:
    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.
    ms162802.note(de-de,SQL.90).gifHinweis:
    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.
ms162802.note(de-de,SQL.90).gifHinweis:
ALTER TABLE-Berechtigungen für die Zieltabelle sind erst in SQL Server 2005 erforderlich geworden. 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.

Beispiele

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 AdventureWorks.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 AdventureWorks.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 AdventureWorks.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 AdventureWorks.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>

Das System fordert Sie zur Eingabe des Kennwortes 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 AdventureWorks 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 AdventureWorks;
GO
SELECT * INTO AdventureWorks.Sales.Currency2 
FROM AdventureWorks.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 AdventureWorks.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 AdventureWorks;
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 AdventureWorks.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 AdventureWorks.Person.Contact-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 AdventureWorks.Person.Contact 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 AdventureWorks.Person.Contact-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 AdventureWorks.Person.Contact ORDER BY LastName, Firstname" queryout Contacts.txt -c -T

G. Erstellen einer Formatdatei, die nicht das Format XML aufweist

Im folgenden Beispiel wird die XML-Formatdatei Currency.fmt für die Sales.Currency-Tabelle in der AdventureWorks-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 AdventureWorks.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 AdventureWorks-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 AdventureWorks.Sales.Currency format nul -T -c -x -f Currency.xml
ms162802.note(de-de,SQL.90).gifHinweis:
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 AdventureWorks.Sales.Currency2 in Currency.dat -T -f Currency.xml
ms162802.note(de-de,SQL.90).gifHinweis:
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.

Zusätzliche Beispiele

Die folgenden Themen enthalten Beispiele zur Verwendung von bcp:

Siehe auch

Andere Ressourcen

Vorbereiten von Daten für den Massenexport oder -import
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Paralleles Importieren von Daten mit Sperren auf Tabellenebene
SET QUOTED_IDENTIFIER (Transact-SQL)
sp_configure (Transact-SQL)
sp_tableoption (Transact-SQL)
Datenformate für das Importieren oder Exportieren von Daten
Formatdateien zum Importieren oder Exportieren von Daten
Optimieren der Leistung des Massenimportierens
Informationen zu Massenimport- und Massenexportvorgängen
Szenarien für den Massenimport und -export von Daten

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Geänderter Inhalt:
  • Die Beschreibung von CHECK_CONSTRAINTS wurde korrigiert, um anzugeben, dass durch das Fehlen dieses Hinweises sowohl die CHECK-Einschränkung als auch die FOREIGN KEY-Einschränkung ignoriert werden.

17. Juli 2006

Neuer Inhalt:
  • Die Beschreibung des ORDER-Arguments wurde aktualisiert.
  • Den Themen, die Beispiele zu bcp enthalten, wurden Links zu zusätzlichen Beispielen hinzugefügt.

14. April 2006

Geänderter Inhalt:
  • Der Hinweis in der Beschreibung von CHECK_CONSTRAINTS wurde aktualisiert, indem FOREIGN KEY aus der Liste der immer erzwungenen Einschränkungen entfernt wurde.
  • Die Anforderungen für die ALTER TABLE-Berechtigung wurden aktualisiert.