BULK INSERT (Transact-SQL)

Importiert eine Datendatei in eine Datenbanktabelle oder Sicht und verwendet dabei ein vom Benutzer angegebenes Format.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

BULK INSERT 
   [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ] 
      FROM 'data_file' 
     [ WITH 
        ( 
   [ [ , ] BATCHSIZE = batch_size ] 
      [ [ , ] CHECK_CONSTRAINTS ] 
   [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] 
      [ [ , ] DATAFILETYPE = 
      { 'char' | 'native'| 'widechar' | 'widenative' } ] 
   [ [ , ] FIELDTERMINATOR = 'field_terminator' ] 
   [ [ , ] FIRSTROW = first_row ] 
   [ [ , ] FIRE_TRIGGERS ] 
   [ [ , ] FORMATFILE = 'format_file_path' ] 
   [ [ , ] KEEPIDENTITY ] 
   [ [ , ] KEEPNULLS ] 
   [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ] 
   [ [ , ] LASTROW = last_row ] 
   [ [ , ] MAXERRORS = max_errors ] 
   [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ] 
   [ [ , ] ROWS_PER_BATCH = rows_per_batch ] 
   [ [ , ] ROWTERMINATOR = 'row_terminator' ] 
   [ [ , ] TABLOCK ] 
   [ [ , ] ERRORFILE = 'file_name' ] 
        )] 

Argumente

  • database_name
    Der Name der Datenbank, in der sich die angegebene Tabelle oder Sicht befindet. Fehlt die Angabe, ist dies die aktuelle Datenbank.

  • schema_name
    Der Name des Tabellen- oder Sichtschemas. schema_name ist optional, wenn das Standardschema des Benutzers, der den Massenimportvorgang ausführt, das Schema der angegebenen Tabelle oder Sicht ist. Wenn schema nicht angegeben wird und es sich bei dem Standardschema des Benutzers, der den Massenimportvorgang ausführt, nicht um das Schema der angegebenen Tabelle oder Sicht handelt, wird in SQL Server eine Fehlermeldung zurückgegeben, und der Massenimportvorgang wird abgebrochen.

  • table_name
    Der Name der Tabelle oder Sicht, in die der Massenimport von Daten erfolgen sollen. Es können nur Sichten verwendet werden, deren Spalten alle auf dieselbe Basistabelle verweisen. Weitere Informationen zu den Einschränkungen beim Laden von Daten in Sichten finden Sie unter INSERT (Transact-SQL).

  • 'data_file'
    Der vollständige Pfad der Datendatei mit den Daten, die in die angegebene Tabelle oder Sicht importiert werden sollen. BULK INSERT kann Daten von einem Datenträger importieren, einschließlich eines Netzwerks, einer Diskette, einer Festplatte usw.

    Für data_file muss ein gültiger Pfad auf dem Server, auf dem SQL Server ausgeführt wird, angegeben werden. Wenn data_file eine Remotedatei ist, geben Sie den UNC-Namen (Universal Naming Convention) an. Ein UNC-Name weist das Format \\Systemname\ShareName\Path\FileName auf. Zum Beispiel: \\SystemX\DiskZ\Sales\update.txt.

  • BATCHSIZE **=**batch_size
    Gibt die Anzahl von Zeilen in einem Batch an. Jeder Batch wird als eine Transaktion auf den Server kopiert. Wenn ein Fehler erzeugt wird, führt SQL Server für die Transaktion jedes Batches ein Commit oder Rollback aus. In der Standardeinstellung werden alle Daten, die sich in der angegebenen Datendatei befinden, als ein Batch behandelt. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.

    Weitere Informationen finden Sie unter Verwalten von Batches 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 die Option CHECK_CONSTRAINTS werden alle CHECK- und FOREIGN KEY-Einschränkungen ignoriert, und nach Abschluss des Vorgangs wird die Einschränkung in der Tabelle als nicht vertrauenswürdig gekennzeichnet.

    HinweisHinweis

    UNIQUE-, PRIMARY KEY- und NOT NULL-Einschränkungen werden immer erzwungen.

    An gewissen Punkten müssen Sie die Einschränkungen in der gesamten Tabelle überprüfen. Wenn die Tabelle vor dem Massenimportvorgang nicht leer war, kann der Aufwand einer erneuten Überprüfung der Einschränkung höher sein als das Anwenden von CHECK-Einschränkungen auf die inkrementellen Daten.

    Möglicherweise möchten Sie Einschränkungen deaktivieren (das Standardverhalten), wenn die Eingabedaten Zeilen enthalten, die die Einschränkungen verletzen. Wenn CHECK-Einschränkungen deaktiviert sind, können Sie die Daten importieren und dann Transact-SQL-Anweisungen verwenden, um die ungültigen Daten zu entfernen.

    HinweisHinweis

    Die Option MAXERRORS kann zur Einschränkungsüberprüfung nicht verwendet werden.

    HinweisHinweis

    In SQL Server 2005 und höheren Versionen erzwingt BULK INSERT neue Datenüberprüfungen, die möglicherweise zum Fehlschlagen vorhandener Skripts führen, wenn diese für ungültige Daten in einer Datendatei ausgeführt werden.

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

  • CODEPAGE = { **'**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 Spalten vom Typ char, varchar oder text mit Zeichenwerten enthalten, die größer als 127 oder kleiner als 32 sind.

    HinweisHinweis

    Microsoft empfiehlt, für jede Spalte einen Sortierungsnamen in einer Formatdatei anzugeben.

    CODEPAGE-Wert

    Beschreibung

    ACP

    Spalten vom Datentyp char, varchar oder text werden von der ANSI/Microsoft Windows-Codepage (ISO 1252) in die SQL Server-Codepage konvertiert.

    OEM (Standard)

    Spalten vom Datentyp char, varchar oder text werden von der OEM-Codepage des Systems in die SQL Server-Codepage konvertiert.

    RAW

    Dies ist die schnellste Option, da keine Konvertierung von einer Codepage in eine andere erfolgt.

    code_page

    Bestimmte Codepagenummer, z. B. 850.

    Wichtiger HinweisWichtig
    SQL Server unterstützt nicht Codepage 65001 (UTF-8-Codierung).

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

  • DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }
    Gibt an, dass BULK INSERT den Importvorgang mithilfe des angegebenen DATAFILETYPE-Werts ausführt.

    DATAFILETYPE-Wert

    Alle Daten, die dargestellt sind in:

    char (Standard)

    Zeichenformat.

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

    native

    Systemeigene (Datenbank-) Datentypen. Erstellen Sie die systemeigene Datendatei durch das Massenimportieren von Daten aus SQL Server mithilfe des Dienstprogramms bcp.

    Der Wert native bietet eine höhere Leistung als der Wert char.

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

    widechar

    Unicode-Zeichen.

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

    widenative

    Systemeigene (Datenbank-) Datentypen, außer in Spalten vom Typ char, varchar und text, in denen Daten im Unicode-Format gespeichert werden. Erstellen Sie die Datendatei widenative durch das Massenimportieren von Daten aus SQL Server mithilfe des Dienstprogramms bcp.

    Der Wert vom Datentyp widenative bietet eine höhere Leistung als der widechar-Wert. Falls die Datendatei erweiterte ANSI-Zeichen enthält, geben Sie widenative an.

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

  • FIELDTERMINATOR ='field_terminator'
    Gibt das Feldabschlusszeichen an, das für Datendateien vom Typ char und widechar verwendet werden soll. In der Standardeinstellung wird \t (Tabstoppzeichen) als Feldabschlusszeichen verwendet. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen.

  • FIRSTROW **=**first_row
    Gibt die Nummer der ersten zu ladenden Zeile an. In der Standardeinstellung ist dies die erste Zeile in der angegebenen Datendatei. FIRSTROW ist einsbasiert.

    HinweisHinweis

    Es ist nicht vorgesehen, dass das FIRSTROW-Attribut Spaltenheader überspringt. Das Überspringen von Headern wird von der BULK INSERT-Anweisung nicht unterstützt. Werden Zeilen übersprungen, werden von SQL Server Database Engine (Datenbankmodul) nur die Feldabschlusszeichen berücksichtigt und die Daten in den Feldern von übersprungenen Zeilen nicht überprüft.

  • FIRE_TRIGGERS
    Gibt an, dass INSERT-Trigger, die für die Zieltabelle definiert sind, während des Massenimportvorgangs ausgeführt werden. Falls Trigger für INSERT-Vorgänge in der Zieltabelle definiert sind, werden sie für jeden abgeschlossenen Batch ausgelöst.

    Wenn FIRE_TRIGGERS nicht angegeben ist, werden keine INSERT-Trigger ausgeführt.

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

  • FORMATFILE ='format_file_path'
    Gibt den vollständigen Pfad einer Formatdatei an. Eine Formatdatei beschreibt die Datendatei, die gespeicherte Antworten enthält. Diese Antworten wurden mithilfe des Dienstprogramms bcp für die gleiche Tabelle oder Sicht erstellt. Die Formatdatei muss verwendet werden, wenn Folgendes zutrifft:

    • Die Datendatei enthält größere oder weniger Spalten als die Tabelle oder Sicht.

    • Die Spalten befinden sich in einer unterschiedlichen Reihenfolge.

    • Die Spaltentrennzeichen variieren.

    • Es liegen andere Änderungen im Datenformat vor. Formatdateien werden in der Regel mit dem Dienstprogramm bcp erstellt und nach Bedarf mit einem Text-Editor geändert. Weitere Informationen finden Sie unter bcp (Dienstprogramm).

  • KEEPIDENTITY
    Gibt an, dass Identitätswerte in der importierten Datendatei für die Identitätsspalte verwendet werden müssen. Wird KEEPIDENTITY nicht angegeben, werden die Identitätswerte für diese Spalte zwar überprüft, jedoch nicht importiert. SQL Server weist dann auf der Basis von Ausgangswerten und inkrementellen Werten, die beim Erstellen der Tabelle angegeben wurden, eindeutige Werte zu. 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. Weitere Informationen finden Sie unter DBCC CHECKIDENT (Transact-SQL).

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

  • KEEPNULLS
    Gibt an, dass in leere Spalten während des Massenimportvorgangs keine Standardwerte eingefügt, sondern ein NULL-Wert für diese Spalten beibehalten werden soll. Weitere Informationen finden Sie unter Beibehalten von NULL-Werten oder Verwenden von Standardwerten während des Massenimports.

  • KILOBYTES_PER_BATCH = kilobytes_per_batch
    Gibt die ungefähre Datenmenge pro Batch in KB als kilobytes_per_batch an. In der Standardeinstellung ist KILOBYTES_PER_BATCH unbekannt. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.

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

  • LASTROW**=**last_row
    Gibt die Nummer der letzten zu ladenden Zeile an. Der Standardwert ist 0 und gibt an, dass die Daten bis zur letzten Zeile in der angegebenen Datendatei geladen werden.

  • MAXERRORS = max_errors
    Gibt die maximale Anzahl von Syntaxfehlern an, die in den Daten zulässig sind, bevor der Massenimportvorgang abgebrochen wird. Jede Zeile, die beim Massenimportvorgang nicht importiert werden kann, wird ignoriert und zählt dabei als ein Fehler. Wenn max_errors nicht angegeben ist, wird der Standardwert 10 verwendet.

    HinweisHinweis

    Die Option MAX_ERRORS kann nicht zur Einschränkungsüberprüfung oder zum Konvertieren der Datentypen money und bigint verwendet werden.

  • ORDER ( { column [ ASC | DESC ] } [ ,... n ] )
    Gibt die Vorgehensweise beim Sortieren der Daten in der Datendatei an. Die Leistung des Massenimportierens wird verbessert, wenn die zu importierenden Daten entsprechend dem gruppierten Index der Tabelle sortiert sind (wenn zutreffend). 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 Namen der Spalten müssen gültige Spaltennamen in der Zieltabelle sein. In der Standardeinstellung geht der Masseneinfügevorgang davon aus, dass die Datendatei nicht sortiert ist. Für die Optimierung des Massenimportvorgangs wird von SQL Server auch überprüft, ob die importierten Daten sortiert sind.

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

  • n
    Ein Platzhalter, der anzeigt, dass mehrere Spalten angegeben werden können.

  • ROWS_PER_BATCH **=**rows_per_batch
    Gibt die ungefähre Anzahl von Datenzeilen in der Datendatei an.

    Standardmäßig werden alle Daten in der Datendatei als einzelne Transaktion an den Server gesendet, und die Anzahl von Zeilen im Batch ist dem Abfrageoptimierer nicht bekannt. Wenn Sie ROWS_PER_BATCH (mit einem Wert > 0) angeben, verwendet der Server diesen Wert, um den Massenimportvorgang zu optimieren. Der für ROWS_PER_BATCH angegebene Wert sollte etwa der tatsächlichen Zeilenanzahl entsprechen. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.

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

  • ROWTERMINATOR ='row_terminator'
    Gibt das Zeilenabschlusszeichen an, das für char- und widechar-Datendateien verwendet werden soll. Standardmäßig wird \r\n (Zeilenendemarke) als Zeilenabschlusszeichen verwendet. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen.

  • TABLOCK
    Gibt an, dass eine Sperre auf Tabellenebene für die Dauer des Massenimportvorgangs aktiviert 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. Da weniger Sperrkonflikte in der Tabelle auftreten, wenn diese während des Massenimportvorgangs gesperrt wird, verbessert sich in manchen Fällen die Leistung erheblich. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.

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

  • ERRORFILE ='file_name'
    Gibt die Datei an, die zum Sammeln der Zeilen verwendet wird, die Formatierungsfehler enthalten und nicht in ein OLE DB-Rowset konvertiert werden können. Diese Zeilen werden aus der Datendatei unverändert in diese Fehlerdatei kopiert.

    Die Fehlerdatei wird bei Ausführung des Befehls erstellt. Falls die Datei bereits vorhanden ist, tritt ein Fehler auf. Darüber hinaus wird eine Kontrolldatei mit der Erweiterung .ERROR.txt erstellt. Diese Datei enthält einen Verweis auf jede Zeile in der Fehlerdatei und stellt eine Fehlerdiagnose bereit. Sobald die Fehler korrigiert wurden, können die Daten geladen werden.

Hinweise

Einen Vergleich der BULK INSERT-Anweisung, der INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung und des bcp-Befehls finden Sie unter Informationen zu Massenimport- und Massenexportvorgängen.

Informationen zur Vorbereitung der Daten für einen Massenimport, beispielsweise die Anforderungen hinsichtlich des Imports von Daten aus einer CSV-Datendatei, finden Sie unter Vorbereiten von Daten für den Massenexport oder -import.

Die BULK INSERT-Anweisung kann innerhalb einer benutzerdefinierten Transaktion ausgeführt werden. Durch das Ausführen eines Rollbacks für eine benutzerdefinierte Transaktion, die eine BULK INSERT-Anweisung und eine BATCHSIZE-Klausel verwendet, um Daten mithilfe von mehreren Batches in eine Tabelle oder Sicht zu importieren, werden Rollbacks für alle an SQL Server gesendeten Batches ausgeführt.

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

In SQL Server 2005 und höheren Versionen erzwingt BULK INSERT neue, strengere Datenüberprüfungen für die aus einer Datei gelesenen Daten, die möglicherweise zum Fehlschlagen vorhandener Skripts führen können, wenn diese für ungültige Daten in einer Datendatei ausgeführt werden. BULK INSERT überprüft nun beispielsweise Folgendes:

  • Die systemeigene Darstellung der Datentypen float oder real ist gültig.

  • Unicode-Daten besitzen eine gerade Bytelänge.

Formulare mit ungültigen Daten, für die in früheren Versionen von SQL Server ein Massenimportvorgang ausgeführt werden konnte, werden nun möglicherweise nicht geladen. In früheren Versionen von SQL Server tritt der Fehler erst auf, wenn ein Client versucht, auf die ungültigen Daten zuzugreifen. Durch die strengere Überprüfung treten weniger häufig überraschende Ergebnisse beim Abfragen der Daten nach einem Massenimport auf.

Leistungsaspekte

Wenn die Anzahl der in einem einzelnen Batch geleerten Seiten einen internen Schwellenwert überschreitet, könnte ein vollständiger Scan des Pufferpools ausgeführt werden, um die zu leerenden Seiten bei der Durchführung eines Commits für den Batch zu identifizieren. Dieser vollständige Scan kann sich negativ auf die Massenimportleistung auswirken. Die Überschreitung des internen Schwellenwerts ist wahrscheinlich, wenn ein großer Pufferpool mit einem langsamen E/A-Subsystem kombiniert wird. Um Pufferüberläufe auf großen Computern zu vermeiden, verwenden Sie entweder keinen TABLOCK-Hinweis (da dieser die Massenoptimierungen entfernt), oder verwenden Sie eine kleinere Batchgröße (die die Massenoptimierungen beibehält).

Da Computer unterschiedlich sind, wird empfohlen, verschiedene Batchgrößen mit den geladenen Daten zu testen, um die optimale Vorgehensweise zu bestimmen.

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 Codepage des Clients oder in der durch die Sortierung implizierte Codepage gesendet. Damit wird dieselbe Wirkung erzielt wie mit der Angabe von DATAFILETYPE ='char' ohne Formatdatei.

SQLNCHAR oder SQLNVARCHAR

Die Daten werden als Unicode-Daten gesendet. Damit wird dieselbe Wirkung erzielt wie mit der Angabe von DATAFILETYPE = 'widechar' ohne Angabe einer Formatdatei.

SQLBINARY oder SQLVARYBIN

Die Daten werden ohne Konvertierung gesendet.

Konvertierungen von Zeichenfolgen- in Dezimaldatentypen

In BULK INSERT-Vorgängen verwendete Konvertierungen von Zeichenfolgen- in Dezimaldatentypen folgen in SQL Server 2005 und höheren Versionen denselben Regeln wie die CONVERT-Funktion von Transact-SQL, die Zeichenfolgen mit numerischen Werten in wissenschaftlicher Schreibweise nicht akzeptiert. Daher behandelt BULK INSERT diese Zeichenfolgen als ungültige Werte und meldet Konvertierungsfehler.

HinweisHinweis

In SQL Server 7.0, und in SQL Server 2000 wird die Konvertierung von Zeichenfolgen- in Dezimaldatentypen für Zeichenfolgen mit Werten in wissenschaftlicher Schreibweise von BULK INSERT unterstützt.

Um dieses Verhalten zu umgehen, verwenden Sie eine Formatdatei zum Massenimport von float-Daten in wissenschaftlicher Schreibweise in Spalten im Dezimalformat. Beschreiben Sie in der Formatdatei diese Spalte explizit als vom Datentyp real oder float. Weitere Informationen zu diesen Datentypen finden Sie unter float und real (Transact-SQL).

HinweisHinweis

Formatdateien stellen real-Daten als SQLFLT4-Datentyp und float-Daten als SQLFLT8-Datentyp dar. Weitere Informationen zu XML-Formatdateien finden Sie unter Schemasyntax für XML-Formatdateien, Informationen zu Nicht-XML-Formatdateien unter Angeben des Dateispeichertyps mithilfe von bcp.

Beispiel: Importieren eines numerischen Werts in wissenschaftlicher Schreibweise

In diesem Beispiel wird die folgende Tabelle verwendet:

CREATE TABLE t_float(c1 float, c2 decimal (5,4))

Der Benutzer möchte nun per Massenimport Daten in die t_float-Tabelle kopieren. Die Datendatei C:\t_float-c.dat enthält float-Daten in wissenschaftlicher Schreibweise, zum Beispiel:

8.0000000000000002E-28.0000000000000002E-2

Diese Daten können jedoch mithilfe von BULK INSERT nicht direkt in die t_float-Tabelle importiert werden, da die zweite Spalte der Tabelle, c2, den decimal-Datentyp verwendet. Daher ist eine Formatdatei erforderlich. In der Formatdatei müssen die float-Daten in wissenschaftlichem Format dem Dezimalformat der Spalte c2 zugeordnet werden.

Die folgende Formatdatei verwendet den SQLFLT8-Datentyp, um der zweiten Spalte das zweite Datenfeld zuzuordnen:

<?xml version="1.0"?>

<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<RECORD>

<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>

<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30"/> </RECORD> <ROW>

<COLUMN SOURCE="1" NAME="c1" xsi:type="SQLFLT8"/>

<COLUMN SOURCE="2" NAME="c2" xsi:type="SQLFLT8"/> </ROW> </BCPFORMAT>

Geben Sie die folgende Transact-SQL-Anweisung aus, und verwenden Sie dabei für diese Formatdatei den Dateinamen C:\t_floatformat-c-xml.xml, damit die Testdaten in die Testtabelle importiert werden:

BULK INSERT bulktest..t_float
FROM 'C:\t_float-c.dat' WITH (FORMATFILE='C:\t_floatformat-c-xml.xml');
GO

Berechtigungen

Erfordert die Berechtigungen INSERT und ADMINISTER BULK OPERATIONS. Darüber hinaus ist die ALTER TABLE-Berechtigung erforderlich, wenn mindestens eine der folgenden Bedingungen zutrifft:

  • Es sind Einschränkungen vorhanden, und die Option CHECK_CONSTRAINTS ist nicht angegeben.

    HinweisHinweis

    Das Deaktivieren von Einschränkungen entspricht dem Standardverhalten. Verwenden Sie die Option CHECK_CONSTRAINTS, um Einschränkungen explizit zu überprüfen.

  • Es sind Trigger vorhanden, und die Option FIRE_TRIGGER ist nicht angegeben.

    HinweisHinweis

    In der Standardeinstellung werden Trigger nicht ausgelöst. Verwenden Sie die Option FIRE_TRIGGER, um Trigger explizit auszulösen.

  • Importieren Sie Identitätswerte aus der Datendatei mithilfe der Option KEEPIDENTITY.

Delegierung von Sicherheitskonten (Identitätswechsel)

Falls ein Benutzer von SQL Server mithilfe der Windows-Authentifizierung angemeldet ist, kann der Benutzer nur die Dateien lesen, auf die das Benutzerkonto zugreifen kann, unabhängig vom Sicherheitsprofil des SQL Server-Prozesses.

Beim Ausführen der BULK INSERT-Anweisung mit sqlcmd oder osql auf einem Computer, um Daten in SQL Server auf einem zweiten Computer einzufügen, und beim Angeben von data_file auf einem dritten Computer mithilfe eines UNC-Pfads wird möglicherweise der Fehler 4861 ausgegeben.

Verwenden Sie die SQL Server-Authentifizierung, um diesen Fehler zu beheben, und geben Sie einen SQL Server-Anmeldenamen an, der das Sicherheitsprofil des SQL Server-Prozesskontos verwendet, oder konfigurieren Sie Windows so, dass die Delegierung von Sicherheitskonten aktiviert ist. Informationen zum Aktivieren der Delegierung für Benutzerkonten finden Sie in der Windows-Hilfe.

Weitere Informationen zu diesem und anderen Sicherheitsaspekten bezüglich der Verwendung von BULK INSERT finden Sie unter Importieren von Massendaten mithilfe von BULK INSERT oder OPENROWSET(BULK...).

Beispiele

A. Verwenden von |-Zeichen zum Importieren von Daten aus einer Datei

Im folgenden Beispiel werden Bestellinformationen aus der angegebenen Datendatei in die AdventureWorks.Sales.SalesOrderDetail-Tabelle importiert. Dabei wird der senkrechte Strich (|) als Feldabschlusszeichen und |\n als Zeilenabschlusszeichen verwendet.

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM 'f:\orders\lineitem.tbl'
   WITH 
      (
         FIELDTERMINATOR =' |',
         ROWTERMINATOR =' |\n'
      )

B. Verwenden des FIRE_TRIGGERS-Arguments

Im folgenden Beispiel wird das FIRE_TRIGGERS-Argument angegeben.

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM 'f:\orders\lineitem.tbl'
   WITH
     (
        FIELDTERMINATOR =' |',
        ROWTERMINATOR = ':\n',
        FIRE_TRIGGERS
      )

C. Verwenden des Zeilenvorschubs als Zeilenabschlusszeichen

Im folgenden Beispiel wird eine Datei importiert, in der der Zeilenvorschub als ein Zeilenabschlusszeichen verwendet wird, z. B. eine UNIX-Ausgabe:

DECLARE @bulk_cmd varchar(1000)
SET @bulk_cmd = 'BULK INSERT AdventureWorks.Sales.SalesOrderDetail
FROM ''<drive>:\<path>\<filename>'' 
WITH (ROWTERMINATOR = '''+CHAR(10)+''')'
EXEC(@bulk_cmd)

Zusätzliche Beispiele

Änderungsverlauf

Aktualisierter Inhalt

Dem Abschnitt "Hinweise" wurden Leistungsaspekte hinzugefügt.

Die Beschreibung der FIRSTROW-Option wurde aktualisiert.

Die Beschreibung von code_page wurde aktualisiert.