BULK INSERT (Transact-SQL)BULK INSERT (Transact-SQL)

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Importiert eine Datendatei in eine Datenbanktabelle oder Sicht und verwendet dabei ein vom Benutzer angegebenes Format in SQL ServerSQL Server.Imports a data file into a database table or view in a user-specified format in SQL ServerSQL Server

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

BULK INSERT
   { database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
      FROM 'data_file'
     [ WITH
    (
   [ [ , ] BATCHSIZE = batch_size ]
   [ [ , ] CHECK_CONSTRAINTS ]
   [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
   [ [ , ] DATAFILETYPE =
      { 'char' | 'native'| 'widechar' | 'widenative' } ]
   [ [ , ] DATA_SOURCE = 'data_source_name' ]
   [ [ , ] ERRORFILE = 'file_name' ]
   [ [ , ] ERRORFILE_DATA_SOURCE = 'data_source_name' ]
   [ [ , ] FIRSTROW = first_row ]
   [ [ , ] FIRE_TRIGGERS ]
   [ [ , ] FORMATFILE_DATASOURCE = 'data_source_name' ]
   [ [ , ] 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 ]

   -- input file format options
   [ [ , ] FORMAT = 'CSV' ]
   [ [ , ] FIELDQUOTE = 'quote_characters']
   [ [ , ] FORMATFILE = 'format_file_path' ]
   [ [ , ] FIELDTERMINATOR = 'field_terminator' ]
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]
    )]

ArgumenteArguments

database_name: der Name der Datenbank, in der sich die angegebene Tabelle oder Ansicht befindet.database_name Is the database name in which the specified table or view resides. Fehlt die Angabe, ist dies die aktuelle Datenbank.If not specified, this is the current database.

schema_name: der Name der Tabelle oder des Ansichtsschemas.schema_name Is the name of the table or view schema. schema_name ist optional, wenn das Standardschema des Benutzers, der den Massenimportvorgang ausführt, das Schema der angegebenen Tabelle oder Sicht ist.schema_name is optional if the default schema for the user performing the bulk-import operation is schema of the specified table or view. 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 ServerSQL Server eine Fehlermeldung zurückgegeben, und der Massenimportvorgang wird abgebrochen.If schema is not specified and the default schema of the user performing the bulk-import operation is different from the specified table or view, SQL ServerSQL Server returns an error message, and the bulk-import operation is canceled.

table_name: der Name der Tabelle oder Ansicht, in die der Massenimport von Daten erfolgen soll.table_name Is the name of the table or view to bulk import data into. Es können nur Sichten verwendet werden, deren Spalten alle auf dieselbe Basistabelle verweisen.Only views in which all columns refer to the same base table can be used. Weitere Informationen über die Einschränkungen beim Laden von Daten in Sichten finden Sie unter INSERT (Transact-SQL).For more information about the restrictions for loading data into views, see INSERT (Transact-SQL).

' data_file ': der vollständige Pfad der Datendatei mit den Daten, die in die angegebene Tabelle oder Ansicht importiert werden sollen.' data_file ' Is the full path of the data file that contains data to import into the specified table or view. Mithilfe von BULK INSERT können Daten von einem Datenträger oder aus Azure Blob Storage importiert werden, einschließlich eines Netzwerks, einer Diskette, einer Festplatte usw.BULK INSERT can import data from a disk or Azure Blob storage (including network, floppy disk, hard disk, and so on).

Für data_file muss ein gültiger Pfad auf dem Server, auf dem SQL ServerSQL Server ausgeführt wird, angegeben werden.data_file must specify a valid path from the server on which SQL ServerSQL Server is running. Wenn data_file eine Remotedatei ist, geben Sie den UNC-Namen (Universal Naming Convention) an.If data_file is a remote file, specify the Universal Naming Convention (UNC) name. Ein UNC-Name weist das Format \\Systemname\ShareName\Path\FileName.A UNC name has the form \\Systemname\ShareName\Path\FileName. Beispiel:For example:

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.dat';

Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 und Azure SQL-Datenbank.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 and Azure SQL Database. Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 kann sich data_file in Azure Blob Storage befinden.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP1.1, the data_file can be in Azure blob storage. In diesem Fall müssen Sie die Option data_source_name angeben.In that case, you need to specify data_source_name option. Ein Beispiel dafür finden Sie unter Importieren von Daten aus einer Datei in Azure Blob Storage.For an example, see Importing data from a file in Azure blob storage.

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt.Azure SQL Database does not support reading from Windows files.

' data_source_name ' Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 und Azure SQL-Datenbank.' data_source_name ' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 and Azure SQL Database. Es handelt sich um eine benannte externe Datenquelle, die auf den Azure Blob-Speicherort der Datei verweist, welche importiert wird.Is a named external data source pointing to the Azure Blob storage location of the file that will be imported. Die externe Datenquelle muss mithilfe der in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 hinzugefügten TYPE = BLOB_STORAGE-Option erstellt werden.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (CREATE EXTERNAL DATA SOURCE).For more information, see CREATE EXTERNAL DATA SOURCE. Ein Beispiel dafür finden Sie unter Importieren von Daten aus einer Datei in Azure Blob Storage.For an example, see Importing data from a file in Azure blob storage.

BATCHSIZE = batch_size: gibt die Anzahl der Zeilen in einem Batch an.BATCHSIZE =batch_size Specifies the number of rows in a batch. Jeder Batch wird als eine Transaktion auf den Server kopiert.Each batch is copied to the server as one transaction. Falls ein Fehler erzeugt wird, führt SQL ServerSQL Server für die Transaktion jedes Batches ein Commit oder Rollback aus.If this fails, SQL ServerSQL Server commits or rolls back the transaction for every batch. In der Standardeinstellung werden alle Daten, die sich in der angegebenen Datendatei befinden, als ein Batch behandelt.By default, all data in the specified data file is one batch. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.For information about performance considerations, see "Remarks," later in this topic.

CHECK_CONSTRAINTS: gibt an, dass alle Einschränkungen, die für die Zieltabelle oder -ansicht gelten, während des Massenimportvorgangs überprüft werden müssen.CHECK_CONSTRAINTS Specifies that all constraints on the target table or view must be checked during the bulk-import operation. 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.Without the CHECK_CONSTRAINTS option, any CHECK and FOREIGN KEY constraints are ignored, and after the operation, the constraint on the table is marked as not-trusted.

Hinweis

UNIQUE- und PRIMARY KEY-Einschränkungen werden immer erzwungen.UNIQUE, and PRIMARY KEY constraints are always enforced. Beim Importieren in eine Zeichenspalte, die mit einer NOT NULL-Einschränkung definiert ist, fügt BULK INSERT eine leere Zeichenfolge ein, wenn die Textdatei keinen Wert enthält.When importing into a character column that is defined with a NOT NULL constraint, BULK INSERT inserts a blank string when there is no value in the text file.

An gewissen Punkten müssen Sie die Einschränkungen in der gesamten Tabelle überprüfen.At some point, you must examine the constraints on the whole table. 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.If the table was non-empty before the bulk-import operation, the cost of revalidating the constraint may exceed the cost of applying CHECK constraints to the incremental data.

Die Deaktivierung von Einschränkungen (das Standardverhalten) kann z. B. erwünscht sein, wenn die Eingabedaten Zeilen enthalten, die Einschränkungen verletzen.A situation in which you might want constraints disabled (the default behavior) is if the input data contains rows that violate constraints. Wenn CHECK-Einschränkungen deaktiviert sind, können Sie die Daten importieren und dann Transact-SQLTransact-SQL-Anweisungen verwenden, um die ungültigen Daten zu entfernen.With CHECK constraints disabled, you can import the data and then use Transact-SQLTransact-SQL statements to remove the invalid data.

Hinweis

Die Option MAXERRORS kann zur Einschränkungsüberprüfung nicht verwendet werden.The MAXERRORS option does not apply to constraint checking.

CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | ' code_page ' }: gibt die Codepage für die in der Datendatei enthaltenen Daten an.CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | 'code_page' } Specifies the code page of the data in the data file. 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.CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values greater than 127 or less than 32. Ein Beispiel finden Sie unter Angeben einer Codepage.For an example, see Specifying a code page.

Wichtig

Die Option CODEPAGE wird unter Linux für SQL Server 2017 (14.x)SQL Server 2017 (14.x) nicht unterstützt.CODEPAGE is not a supported option on Linux for SQL Server 2017 (14.x)SQL Server 2017 (14.x). Für SQL Server 2019 (15.x)SQL Server 2019 (15.x) ist nur die Option 'RAW' für CODEPAGE zulässig.For SQL Server 2019 (15.x)SQL Server 2019 (15.x), only the 'RAW' option is allowed for CODEPAGE.

Hinweis

MicrosoftMicrosoft empfiehlt, für jede Spalte einen Sortierungsnamen in einer Formatdatei anzugeben.recommends that you specify a collation name for each column in a format file.

CODEPAGE-WertCODEPAGE value und BeschreibungDescription
ACPACP Spalten vom Datentyp char, varchar oder text werden von der ANSIANSI/MicrosoftMicrosoft Windows-Codepage (ISO 1252) in die SQL ServerSQL Server-Codepage konvertiert.Columns of char, varchar, or text data type are converted from the ANSIANSI/MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (Standard)OEM (default) Spalten vom Datentyp char, varchar oder text werden von der OEM-Codepage des Systems in die SQL ServerSQL Server-Codepage konvertiert.Columns of char, varchar, or text data type are converted from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW Dies ist die schnellste Option, da keine Konvertierung von einer Codepage in eine andere erfolgt.No conversion from one code page to another occurs; this is the fastest option.
Codepagecode_page Bestimmte Codepagenummer, z. B. 850.Specific code page number, for example, 850.

** Wichtig ** In Versionen vor SQL Server 2016 (13.x)SQL Server 2016 (13.x) wird die Codepage 65001 (UTF-8-Codierung) nicht unterstützt.** Important ** Versions prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) do not support code page 65001 (UTF-8 encoding).
   

DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }: gibt an, dass BULK INSERT den Importvorgang mithilfe des angegebenen DATAFILETYPE-Werts ausführt.DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' } Specifies that BULK INSERT performs the import operation using the specified data-file type value.

 

DATAFILETYPE-WertDATAFILETYPE value Alle Daten, die dargestellt sind in:All data represented in:
char (Standard)char (default) ZeichenformatCharacter format.

Weitere Informationen finden Sie unter Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten (SQL Server).For more information, see Use Character Format to Import or Export Data (SQL Server).
nativenative Systemeigene (Datenbank-) Datentypen.Native (database) data types. Erstellen Sie die native Datendatei durch das Massenimportieren von Daten aus SQL ServerSQL Server mithilfe des Hilfsprogramms bcp.Create the native data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

Der Wert native bietet eine höhere Leistung als der Wert char.The native value offers a higher performance alternative to the char value. Das native Format wird für die Massenübertragung von Daten zwischen mehreren Instanzen von SQL Server mithilfe einer Datendatei empfohlen, die keinen erweiterten Zeichensatz bzw. Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) enthält.Native format is recommended when you bulk transfer data between multiple instances of SQL Server using a data file that does not contain any extended/double-byte character set (DBCS) characters.

Weitere Informationen finden Sie unter Verwenden des nativen Formats zum Importieren oder Exportieren von Daten (SQL Server).For more information, see Use Native Format to Import or Export Data (SQL Server).
widecharwidechar Unicode-ZeichenUnicode characters.

Weitere Informationen finden Sie unter Verwenden des Unicode-Zeichenformats zum Importieren und Exportieren von Daten (SQL Server).For more information, see Use Unicode Character Format to Import or Export Data (SQL Server).
widenativewidenative Native (Datenbank-) Datentypen, außer in char-, varchar- und text-Spalten, in denen Date als Unicode gespeichert werden.Native (database) data types, except in char, varchar, and text columns, in which data is stored as Unicode. Erstellen Sie die Datendatei widenative durch das Massenimportieren von Daten aus SQL ServerSQL Server mithilfe des Hilfsprogramms bcp.Create the widenative data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

Der Wert vom Datentyp widenative bietet eine höhere Leistung als der widechar-Wert.The widenative value offers a higher performance alternative to widechar. Falls die Datendatei erweiterte ANSIANSI-Zeichen enthält, geben Sie widenative an.If the data file contains ANSIANSI extended characters, specify widenative.

Weitere Informationen finden Sie unter Verwenden des nativen Unicode-Formats zum Importieren oder Exportieren von Daten (SQL Server).For more information, see Use Unicode Native Format to Import or Export Data (SQL Server).
   

ERRORFILE =' file_name ': gibt die Datei an, die zum Erfassen der Zeilen verwendet wird, die Formatierungsfehler enthalten und nicht in ein OLE DB-Rowset konvertiert werden können.ERRORFILE ='file_name' Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Diese Zeilen werden aus der Datendatei unverändert in diese Fehlerdatei kopiert.These rows are copied into this error file from the data file "as is."

Die Fehlerdatei wird bei Ausführung des Befehls erstellt.The error file is created when the command is executed. Falls die Datei bereits vorhanden ist, tritt ein Fehler auf.An error occurs if the file already exists. Darüber hinaus wird eine Kontrolldatei mit der Erweiterung .ERROR.txt erstellt.Additionally, a control file that has the extension .ERROR.txt is created. Diese Datei enthält einen Verweis auf jede Zeile in der Fehlerdatei und stellt eine Fehlerdiagnose bereit.This references each row in the error file and provides error diagnostics. Sobald die Fehler korrigiert wurden, können die Daten geladen werden.As soon as the errors have been corrected, the data can be loaded. Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) kann sich error_file_path im Azure Blob Storage befinden.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blob storage.

'errorfile_data_source_name' Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.'errorfile_data_source_name' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Es handelt sich um eine benannte externe Datenquelle, die auf den Azure Blob-Speicherort der Fehlerdatei verweist, welche Fehler enthält, die während des Importierens gefunden wurden.Is a named external data source pointing to the Azure Blob storage location of the error file that will contain errors found during the import. Die externe Datenquelle muss mithilfe der in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 hinzugefügten TYPE = BLOB_STORAGE-Option erstellt werden.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (CREATE EXTERNAL DATA SOURCE).For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW = first_row: gibt die Nummer der ersten zu ladenden Zeile an.FIRSTROW = first_row Specifies the number of the first row to load. In der Standardeinstellung ist dies die erste Zeile in der angegebenen Datendatei.The default is the first row in the specified data file. FIRSTROW ist einsbasiert.FIRSTROW is 1-based.

Hinweis

Es ist nicht vorgesehen, dass das FIRSTROW-Attribut Spaltenheader überspringt.The FIRSTROW attribute is not intended to skip column headers. Header zu überspringen wird von der BULK INSERT-Anweisung nicht unterstützt.Skipping headers is not supported by the BULK INSERT statement. Wenn Zeilen ausgelassen werden, werden von SQL Server-Datenbank-EngineSQL Server Database Engine nur die Feldabschlusszeichen berücksichtigt und die Daten in den Feldern von ausgelassenen Zeilen nicht überprüft.When skipping rows, the SQL Server-Datenbank-EngineSQL Server Database Engine looks only at the field terminators, and does not validate the data in the fields of skipped rows.

FIRE_TRIGGERS: gibt an, dass INSERT-Trigger, die für die Zieltabelle definiert sind, während des Massenimportvorgangs ausgeführt werden.FIRE_TRIGGERS Specifies that any insert triggers defined on the destination table execute during the bulk-import operation. Falls Trigger für INSERT-Vorgänge in der Zieltabelle definiert sind, werden sie für jeden abgeschlossenen Batch ausgelöst.If triggers are defined for INSERT operations on the target table, they are fired for every completed batch.

Wenn FIRE_TRIGGERS nicht angegeben ist, werden keine INSERT-Trigger ausgeführt.If FIRE_TRIGGERS is not specified, no insert triggers execute.

FORMATFILE_DATASOURCE = 'data_source_name' : Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1.FORMATFILE_DATASOURCE = 'data_source_name' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1. Es handelt sich um eine benannte externe Datenquelle, die auf den Azure Blob-Speicherort der Formatatei verweist, welche das Schema der importierten Daten definiert.Is a named external data source pointing to the Azure Blob storage location of the format file that will define the schema of imported data. Die externe Datenquelle muss mithilfe der in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 hinzugefügten TYPE = BLOB_STORAGE-Option erstellt werden.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (CREATE EXTERNAL DATA SOURCE).For more information, see CREATE EXTERNAL DATA SOURCE.

KEEPIDENTITY: gibt an, dass Identitätswerte in der importierten Datendatei für die Identitätsspalte verwendet werden sollen.KEEPIDENTITY Specifies that identity value or values in the imported data file are to be used for the identity column. Wird KEEPIDENTITY nicht angegeben, werden die Identitätswerte für diese Spalte zwar überprüft, jedoch nicht importiert. SQL ServerSQL Server weist dann auf der Basis von Ausgangswerten und inkrementellen Werten, die beim Erstellen der Tabelle angegeben wurden, eindeutige Werte zu.If KEEPIDENTITY is not specified, the identity values for this column are verified but not imported and SQL ServerSQL Server automatically assigns unique values based on the seed and increment values specified during table creation. 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 ServerSQL Server weist der Spalte automatisch eindeutige Werte zu.If the data file does not contain values for the identity column in the table or view, use a format file to specify that the identity column in the table or view is to be skipped when importing data; SQL ServerSQL Server automatically assigns unique values for the column. Weitere Informationen finden Sie unter DBCC CHECKIDENT (Transact-SQL).For more information, see DBCC CHECKIDENT (Transact-SQL).

Weitere Informationen über das Beibehalten von Identitätswerten finden Sie unter Beibehalten von Identitätswerten beim Massenimport von Daten (SQL Server).For more information, see about keeping identify values see Keep Identity Values When Bulk Importing Data (SQL Server).

KEEPNULLS: gibt an, dass in leere Spalten während des Massenimportvorgangs keine Standardwerte eingefügt werden sollen, sondern ein NULL-Wert für diese Spalten beibehalten werden soll.KEEPNULLS Specifies that empty columns should retain a null value during the bulk-import operation, instead of having any default values for the columns inserted. Weitere Informationen finden Sie unter Beibehalten von NULL-Werten oder Verwenden von Standardwerten während des Massenimports (SQL Server).For more information, see Keep Nulls or Use Default Values During Bulk Import (SQL Server).

KILOBYTES_PER_BATCH = kilobytes_per_batch: gibt die ungefähre Datenmenge pro Batch in KB als kilobytes_per_batch an.KILOBYTES_PER_BATCH = kilobytes_per_batch Specifies the approximate number of kilobytes (KB) of data per batch as kilobytes_per_batch. In der Standardeinstellung ist KILOBYTES_PER_BATCH unbekannt.By default, KILOBYTES_PER_BATCH is unknown. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.For information about performance considerations, see "Remarks," later in this topic.

LASTROW = last_row Gibt die Nummer der letzten zu ladenden Zeile an.LASTROW = last_row Specifies the number of the last row to load. Der Standardwert ist 0, wodurch die Daten bis zur letzten Zeile in der angegebenen Datendatei geladen werden.The default is 0, which indicates the last row in the specified data file.

MAXERRORS = max_errors: gibt die maximale Anzahl von Syntaxfehlern an, die in den Daten zulässig sind, bevor der Massenimportvorgang abgebrochen wird.MAXERRORS = max_errors Specifies the maximum number of syntax errors allowed in the data before the bulk-import operation is canceled. Jede Zeile, die beim Massenimportvorgang nicht importiert werden kann, wird ignoriert und zählt dabei als ein Fehler.Each row that cannot be imported by the bulk-import operation is ignored and counted as one error. Wenn max_errors nicht angegeben ist, wird der Standardwert 10 verwendet.If max_errors is not specified, the default is 10.

Hinweis

Die Option MAX_ERRORS kann nicht zur Einschränkungsüberprüfung oder zum Konvertieren der Datentypen money und bigint verwendet werden.The MAX_ERRORS option does not apply to constraint checks or to converting money and bigint data types.

ORDER ( { column [ ASC | DESC ] } [ , ... n ] ): gibt an, wie die Daten in der Datendatei sortiert werden.ORDER ( { column [ ASC | DESC ] } [ ,... n ] ) Specifies how the data in the data file is sorted. Die Leistung des Massenkopierens wird verbessert, wenn die zu importierenden Daten entsprechend dem gruppierten Index der Tabelle (falls vorhanden) sortiert sind.Bulk import performance is improved if the data being imported is sorted according to the clustered index on the table, if any. 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.If the data file is sorted in a different order, that is other than the order of a clustered index key or if there is no clustered index on the table, the ORDER clause is ignored. Die angegebenen Spaltennamen müssen gültige Spaltennamen in der Zieltabelle sein.The column names supplied must be valid column names in the destination table. Standardmäßig geht der Masseneinfügevorgang davon aus, dass die Datendatei nicht sortiert ist.By default, the bulk insert operation assumes the data file is unordered. Beim optimierten Massenimport wird in SQL ServerSQL Server auch überprüft, ob die importierten Daten sortiert sind.For optimized bulk import, SQL ServerSQL Server also validates that the imported data is sorted.

n: ist ein Platzhalter, der anzeigt, dass mehrere Spalten angegeben werden können.n Is a placeholder that indicates that multiple columns can be specified.

ROWS_PER_BATCH = rows_per_batch: gibt die ungefähre Anzahl von Datenzeilen in der Datendatei an.ROWS_PER_BATCH = rows_per_batch Indicates the approximate number of rows of data in the data file.

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.By default, all the data in the data file is sent to the server as a single transaction, and the number of rows in the batch is unknown to the query optimizer. Wenn Sie ROWS_PER_BATCH (mit einem Wert > 0) angeben, verwendet der Server diesen Wert, um den Massenimportvorgang zu optimieren.If you specify ROWS_PER_BATCH (with a value > 0) the server uses this value to optimize the bulk-import operation. Der für ROWS_PER_BATCH angegebene Wert sollte etwa der tatsächlichen Zeilenanzahl entsprechen.The value specified for ROWS_PER_BATCH should approximately the same as the actual number of rows. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.For information about performance considerations, see "Remarks," later in this topic.

TABLOCK: gibt an, dass eine Sperre auf Tabellenebene für die Dauer des Massenimportvorgangs aktiviert wird.TABLOCK Specifies that a table-level lock is acquired for the duration of the bulk-import operation. Eine Tabelle kann gleichzeitig von mehreren Clients geladen werden, wenn die Tabelle keine Indizes aufweist und TABLOCK angegeben ist.A table can be loaded concurrently by multiple clients if the table has no indexes and TABLOCK is specified. Standardmäßig wird das Sperrverhalten durch die Tabellenoption table lock on bulk loadbestimmt.By default, locking behavior is determined by the table option table lock on bulk load. Da weniger Sperrkonflikte in der Tabelle auftreten, wenn diese während des Massenimportvorgangs gesperrt wird, verbessert sich in manchen Fällen die Leistung erheblich.Holding a lock for the duration of the bulk-import operation reduces lock contention on the table, in some cases can significantly improve performance. Informationen zu Leistungsaspekten finden Sie unter "Hinweise" weiter unten in diesem Thema.For information about performance considerations, see "Remarks," later in this topic.

Bei einem Columnstore-IndexFor columnstore index. ist das Sperrverhalten anders, weil es intern in mehrere Rowsets unterteilt ist. Jeder Thread lädt Daten ausschließlich in jedes Rowset, indem er eine X-Sperre auf das Rowset anwendet, die das parallele Laden von Daten mit Datenladungssitzungen zulässt.the locking behavior is different because it is internally divided into multiple rowsets.Each thread loads data exclusively into each rowset by taking a X lock on the rowset allowing parallel data load with concurrent data load sessions. Durch die Verwendung der Option TABLOCK führt der Thread eine X-Sperre in der Tabelle durch (im Gegensatz zur BU-Sperre für traditionelle Rowsets), wodurch verhindert wird, dass andere gleichzeitige Threads Daten gleichzeitig laden.The use of TABLOCK option will cause thread to take an X lock on the table (unlike BU lock for traditional rowsets) which will prevent other concurrent threads to load data concurrently.

Formatoptionen der EingabedateiInput file format options

FORMAT = 'CSV' Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.FORMAT = 'CSV' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Gibt eine CSV-Datei an, die dem Standard RFC 4180 entspricht.Specifies a comma separated values file compliant to the RFC 4180 standard.

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.csv'
WITH ( FORMAT='CSV');

FIELDQUOTE = 'field_quote' Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.FIELDQUOTE = 'field_quote' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Gibt ein Zeichen an, das als Anführungszeichen in der CSV-Datei verwendet wird.Specifies a character that will be used as the quote character in the CSV file. Wenn dies nicht angegeben ist, wird das Anführungszeichen (") so verwendet, wie es im Standard RFC 4180 definiert ist.If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

FORMATFILE = 'format_file_path': gibt den vollständigen Pfad einer Formatdatei an.FORMATFILE = 'format_file_path' Specifies the full path of a format file. Eine Formatdatei beschreibt die Datendatei, die gespeicherte Antworten enthält. Diese Antworten wurden mithilfe des Hilfsprogramms bcp für die gleiche Tabelle oder Sicht erstellt.A format file describes the data file that contains stored responses created by using the bcp utility on the same table or view. Die Formatdatei muss verwendet werden, wenn Folgendes zutrifft:The format file should be used if:

  • Die Datendatei enthält größere oder weniger Spalten als die Tabelle oder Sicht.The data file contains greater or fewer columns than the table or view.
  • Die Spalten befinden sich in einer unterschiedlichen Reihenfolge.The columns are in a different order.
  • Die Spaltentrennzeichen variieren.The column delimiters vary.
  • Es liegen andere Änderungen im Datenformat vor.There are other changes in the data format. Formatdateien werden in der Regel mit dem Hilfsprogramm bcp erstellt und nach Bedarf mit einem Text-Editor geändert.Format files are typically created by using the bcp utility and modified with a text editor as needed. Weitere Informationen finden Sie unter Das Hilfsprogramm bcp und Erstellen einer Formatdatei.For more information, see bcp Utility and Create a format file.

Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 und Azure SQL-Datenbank.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 and Azure SQL Database. Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 kann sich format_file_path in Azure Blob Storage befinden.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blob storage.

FIELDTERMINATOR =' field_terminator ': gibt das Feldabschlusszeichen an, das für Datendateien vom Typ char und widechar verwendet werden soll.FIELDTERMINATOR ='field_terminator' Specifies the field terminator to be used for char and widechar data files. Standardmäßig wird \t (Tabstoppzeichen) als Feldabschlusszeichen verwendet.The default field terminator is \t (tab character). Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

ROWTERMINATOR =' row_terminator ': gibt das Zeilenabschlusszeichen an, das für char- und widechar-Datendateien verwendet werden soll.ROWTERMINATOR ='row_terminator' Specifies the row terminator to be used for char and widechar data files. Standardmäßig wird \r\n (Neue-Zeile-Zeichen) als Zeilenabschlusszeichen verwendet.The default row terminator is \r\n (newline character). Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenabschlusszeichen (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

KompatibilitätCompatibility

BULK INSERT erzwingt strenge 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 enforces strict data validation and data checks of data read from a file that could cause existing scripts to fail when they are executed on invalid data. BULK INSERT überprüft beispielsweise Folgendes:For example, BULK INSERT verifies that:

  • Die native Darstellung der Datentypen float oder real ist gültig.The native representations of float or real data types are valid.
  • Unicode-Daten besitzen eine gerade Bytelänge.Unicode data has an even-byte length.

DatentypenData Types

Konvertierungen von Zeichenfolgen- in DezimaldatentypenString-to-Decimal Data Type Conversions

Die in BULK INSERT-Vorgängen verwendeten Konvertierungen von Zeichenfolgen in Dezimaldatentypen folgen denselben Regeln wie die Transact-SQLTransact-SQL CONVERT-Funktion insofern, als Zeichenfolgen mit numerischen Werten in wissenschaftlicher Schreibweise nicht akzeptiert werden.The string-to-decimal data type conversions used in BULK INSERT follow the same rules as the Transact-SQLTransact-SQL CONVERT function, which rejects strings representing numeric values that use scientific notation. Daher behandelt BULK INSERT diese Zeichenfolgen als ungültige Werte und meldet Konvertierungsfehler.Therefore, BULK INSERT treats such strings as invalid values and reports conversion errors.

Um dieses Verhalten zu umgehen, verwenden Sie eine Formatdatei zum Massenimport von float-Daten in wissenschaftlicher Schreibweise in Spalten im Dezimalformat.To work around this behavior, use a format file to bulk import scientific notation float data into a decimal column. Beschreiben Sie in der Formatdatei diese Spalte explizit als vom Datentyp real oder float.In the format file, explicitly describe the column as real or float data. Weitere Informationen zu diesen Datentypen finden Sie unter float und real (Transact-SQL).For more information about these data types, see float and real (Transact-SQL).

Hinweis

Formatdateien stellen real-Daten als SQLFLT4-Datentyp und float-Daten als SQLFLT8-Datentyp dar.Format files represent real data as the SQLFLT4 data type and float data as the SQLFLT8 data type. Weitere Informationen über Nicht-XML-Formatdateien finden Sie unter Angeben des Dateispeichertyps mithilfe von bcp (SQL Server).For information about non-XML format files, see Specify File Storage Type by Using bcp (SQL Server).

Beispiel: Importieren eines numerischen Werts in wissenschaftlicher SchreibweiseExample of Importing a Numeric Value that Uses Scientific Notation

In diesem Beispiel wird die folgende Tabelle verwendet:This example uses the following table:

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

Der Benutzer möchte nun per Massenimport Daten in die t_float-Tabelle kopieren.The user wants to bulk import data into the t_float table. Die Datendatei „C:\t_float-c.dat“ enthält float-Daten in wissenschaftlicher Schreibweise, wie zum Beispiel:The data file, C:\t_float-c.dat, contains scientific notation float data; for example:

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.However, BULK INSERT cannot import this data directly into t_float, because its second column, c2, uses the decimal data type. Daher ist eine Formatdatei erforderlich.Therefore, a format file is necessary. In der Formatdatei müssen die float-Daten in wissenschaftlichem Format dem Dezimalformat der Spalte c2 zugeordnet werden.The format file must map the scientific notation float data to the decimal format of column c2.

Die folgende Formatdatei verwendet den SQLFLT8-Datentyp, um der zweiten Spalte das zweite Datenfeld zuzuordnen:The following format file uses the SQLFLT8 data type to map the second data field to the second column:

<?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-SQLTransact-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:To use this format file (using the file name C:\t_floatformat-c-xml.xml) to import the test data into the test table, issue the following Transact-SQLTransact-SQL statement:

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

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt. Das Lesen aus Azure Blob Storage ist allerdings möglich.Azure SQL Database does not support reading from Windows files, but can read from Azure Blob storage.

Datentypen für den Massenexport bzw. -import von SQLXML-DokumentenData Types for Bulk Exporting or Importing SQLXML Documents

Verwenden Sie in der Formatdatei einen der folgenden Datentypen für den Massenexport oder -import von SQLXML-Daten:To bulk export or import SQLXML data, use one of the following data types in your format file:

DatentypData type WirkungEffect
SQLCHAR oder SQLVARCHARSQLCHAR or SQLVARCHAR Die Daten werden in der Clientcodepage gesendet bzw. in der durch die Sortierung implizierten Codeseite.The data is sent in the client code page or in the code page implied by the collation). Damit wird dieselbe Wirkung erzielt wie mit der Angabe von DATAFILETYPE ='char' ohne Formatdatei.The effect is the same as specifying the DATAFILETYPE ='char' without specifying a format file.
SQLNCHAR oder SQLNVARCHARSQLNCHAR or SQLNVARCHAR Die Daten werden im Unicode-Format gesendet.The data is sent as Unicode. Damit wird dieselbe Wirkung erzielt wie mit der Angabe von DATAFILETYPE = 'widechar' ohne Formatdatei.The effect is the same as specifying the DATAFILETYPE = 'widechar' without specifying a format file.
SQLBINARY oder SQLVARBINSQLBINARY or SQLVARBIN Die Daten werden ohne Konvertierung gesendet.The data is sent without any conversion.
   

Allgemeine HinweiseGeneral Remarks

Einen Vergleich der BULK INSERT-Anweisung, der INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung und des bcp-Befehl finden Sie unter Massenimport und -export von Daten (SQL Server).For a comparison of the BULK INSERT statement, the INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, and the bcp command, see Bulk Import and Export of Data (SQL Server).

Informationen zum Vorbereiten von Daten für den Massenimport finden Sie unter Vorbereiten von Daten für den Massenexport oder -import (SQL Server).For information about preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

Die BULK INSERT-Anweisung kann innerhalb einer benutzerdefinierten Transaktion ausgeführt werden, um Daten in eine Tabelle oder eine Sicht zu importieren.The BULK INSERT statement can be executed within a user-defined transaction to import data into a table or view. Damit mehrere Übereinstimmungen für den Massenimport von Daten verwendet werden, kann in einer Transaktion optional die BATCHSIZE-Klausel in der BULK INSERT-Anweisung angegeben werden.Optionally, to use multiple matches for bulk importing data, a transaction can specify the BATCHSIZE clause in the BULK INSERT statement. Wenn ein Rollback für eine Transaktion mit mehreren Batches ausgeführt wird, wird für jeden Batch, der bei der Transaktion an SQL ServerSQL Server gesendet wurde, ein Rollback ausgeführt.If a multiple-batch transaction is rolled back, every batch that the transaction has sent to SQL ServerSQL Server is rolled back.

InteroperabilitätInteroperability

Importieren von Daten aus einer CSV-DateiImporting Data from a CSV file

Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 unterstützt BULK INSERT genauso wie Azure SQL-Datenbank das CSV-Format.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, BULK INSERT supports the CSV format, as does Azure SQL Database. Vor SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 wurden CSV-Dateien von SQL ServerSQL Server-Massenimportvorgängen nicht unterstützt.Before SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, comma-separated value (CSV) files are not supported by SQL ServerSQL Server bulk-import operations. In manchen Fällen kann jedoch eine CSV-Datei als Datendatei für einen Massenimport von Daten in SQL ServerSQL Serververwendet werden.However, in some cases, a CSV file can be used as the data file for a bulk import of data into SQL ServerSQL Server. Informationen zu den Anforderungen hinsichtlich des Imports von Daten aus einer CSV-Datendatei finden Sie unter Vorbereiten von Daten für den Massenexport oder -import (SQL Server).For information about the requirements for importing data from a CSV data file, see Prepare Data for Bulk Export or Import (SQL Server).

ProtokollierungsverhaltenLogging Behavior

Informationen dazu, wann Zeileneinfügevorgänge, die durch den Massenimport in SQL Server-Instanzen ausgeführt werden, im Transaktionsprotokoll protokolliert werden, finden Sie unter Voraussetzungen für die minimale Protokollierung beim Massenimport.For information about when row-insert operations that are performed by bulk import into SQL SErver are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import. Die minimale Protokollierung wird in Azure SQL-Datenbank nicht unterstützt.Minimal logging is not supported in Azure SQL Database.

EinschränkungenRestrictions

Bei Verwendung einer Formatdatei mit BULK INSERT können maximal 1024 Felder angegeben werden.When using a format file with BULK INSERT, you can specify up to 1024 fields only. Dieser Höchstwert entspricht der maximalen Zahl zulässiger Spalten in einer Tabelle.This is same as the maximum number of columns allowed in a table. Wenn Sie eine Formatdatei mit BULK INSERT und einer Datendatei verwenden, in der mehr als 1024 Felder enthalten sind, löst BULK INSERT den Fehler 4822 aus.If you use a format file with BULK INSERT with a data file that contains more than 1024 fields, BULK INSERT generates the 4822 error. Das Hilfsprogramm bcp unterliegt dieser Einschränkung nicht. Verwenden Sie deshalb für Datendateien mit mehr als 1024 Feldern BULK INSERT ohne Formatdatei, oder verwenden Sie den Befehl bcp.The bcp utility does not have this limitation, so for data files that contain more than 1024 fields, use BULK INSERT without a format file or use the bcp command.

Überlegungen zur LeistungPerformance Considerations

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.If the number of pages to be flushed in a single batch exceeds an internal threshold, a full scan of the buffer pool might occur to identify which pages to flush when the batch commits. Dieser vollständige Scan kann sich negativ auf die Massenimportleistung auswirken.This full scan can hurt bulk-import performance. Die Überschreitung des internen Schwellenwerts ist wahrscheinlich, wenn ein großer Pufferpool mit einem langsamen E/A-Subsystem kombiniert wird.A likely case of exceeding the internal threshold occurs when a large buffer pool is combined with a slow I/O subsystem. 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).To avoid buffer overflows on large machines, either do not use the TABLOCK hint (which will remove the bulk optimizations) or use a smaller batch size (which preserves the bulk optimizations).

Da Computer unterschiedlich sind, wird empfohlen, verschiedene Batchgrößen mit den geladenen Daten zu testen, um die optimale Vorgehensweise zu bestimmen.Because computers vary, we recommend that you test various batch sizes with your data load to find out what works best for you.

Wenn Sie Azure SQL-Datenbank verwenden, sollten Sie in Betracht ziehen, die Leistungsstufe der Datenbank oder der Instanz vor dem Importieren vorübergehend zu erhöhen, wenn Sie eine große Datenmenge importieren.With Azure SQL Database, consider temporarily increasing the performance level of the database or instance prior to the import if you are importing a large volume of data.

SecuritySecurity

Delegierung von Sicherheitskonten (Identitätswechsel)Security Account Delegation (Impersonation)

Wenn ein Benutzer einen SQL ServerSQL Server -Anmeldenamen verwendet, wird das Sicherheitsprofil des SQL ServerSQL Server -Prozesskontos verwendet.If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. Ein Anmeldename, für den die SQL Server-Authentifizierung verwendet wird, kann nicht außerhalb der Datenbank-Engine authentifiziert werden.A login using SQL Server authentication cannot be authenticated outside of the Database Engine. Wenn ein BULK INSERT-Befehl durch einen Anmeldenamen initiiert wird, der die SQL Server-Authentifizierung verwendet, wird die Datenverbindung folglich mithilfe des Sicherheitskontexts des SQL Server-Prozesskontos (dem vom SQL Server-Datenbank-Engine-Dienst verwendeten Konto) hergestellt.Therefore, when a BULK INSERT command is initiated by a login using SQL Server authentication, the connection to the data is made using the security context of the SQL Server process account (the account used by the SQL Server Database Engine service). Um die Quelldaten lesen zu können, müssen Sie dem von der SQL Server-Datenbank-Engine verwendeten Konto Zugriff auf die Quelldaten gewähren. Wenn sich ein SQL ServerSQL Server-Benutzer dagegen mithilfe der Windows-Authentifizierung anmeldet, kann der Benutzer nur diejenigen Dateien lesen, auf die vom Benutzerkonto zugegriffen werden kann. Das gilt unabhängig vom Sicherheitsprofil des SQL ServerSQL Server-Prozesses.To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data.In contrast, if a SQL ServerSQL Server user logs on by using Windows Authentication, the user can read only those files that can be accessed by the user account, regardless of the security profile of the SQL ServerSQL Server process.

Wenn die BULK INSERT-Anweisung mit sqlcmd oder osql auf einem Computer ausgeführt wird, um Daten in SQL ServerSQL Server auf einem zweiten Computer einzufügen, und data_file auf einem dritten Computer mithilfe eines UNC-Pfads angegeben wird, kann der Fehler 4861 ausgegeben werden.When executing the BULK INSERT statement by using sqlcmd or osql, from one computer, inserting data into SQL ServerSQL Server on a second computer, and specifying a data_file on third computer by using a UNC path, you may receive a 4861 error.

Verwenden Sie die SQL ServerSQL Server-Authentifizierung, um diesen Fehler zu beheben, und geben Sie einen SQL ServerSQL Server-Anmeldenamen an, der das Sicherheitsprofil des SQL ServerSQL Server-Prozesskontos verwendet, oder konfigurieren Sie Windows so, dass die Delegierung von Sicherheitskonten aktiviert ist.To resolve this error, use SQL ServerSQL Server Authentication and specify a SQL ServerSQL Server login that uses the security profile of the SQL ServerSQL Server process account, or configure Windows to enable security account delegation. Informationen zum Aktivieren der Delegierung für Benutzerkonten finden Sie in der Windows-Hilfe.For information about how to enable a user account to be trusted for delegation, see Windows Help.

Weitere Informationen über diese und andere Überlegungen zur Sicherheit bei der Verwendung von BULK INSERT finden Sie unter Importieren von Massendaten mithilfe von BULK INSERT oder OPENROWSET(BULK...) (SQL Server).For more information about this and other security considerations for using BULK INSERT, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

Wenn Sie Daten aus Azure Blob Storage importieren, die nicht öffentlich sind (anonymer Zugriff), erstellen Sie eine DATABASE SCOPED CREDENTIAL-Anweisung, die auf einem SAS-Schlüssel basiert, der mit einer MASTER KEY-Anweisung verschlüsselt ist. Erstellen Sie anschließend eine externe Datenbankquelle für die Verwendung in Ihrem BULK INSERT-Befehl.When importing from Azure Blob storage and the data is not public (anonymous access), create a DATABASE SCOPED CREDENTIAL based on a SAS key which is encrypted with a MASTER KEY, and then create an then create an external database source for use in your BULK INSERT command. Ein Beispiel dafür finden Sie unter Importieren von Daten aus einer Datei in Azure Blob Storage.For an example, see Importing data from a file in Azure blob storage.

BerechtigungenPermissions

Erfordert die Berechtigungen INSERT und ADMINISTER BULK OPERATIONS.Requires INSERT and ADMINISTER BULK OPERATIONS permissions. In der Azure SQL-Datenbank sind INSERT- und ADMINISTER DATABASE BULK OPERATIONS-Berechtigungen erforderlich.In Azure SQL Database, INSERT and ADMINISTER DATABASE BULK OPERATIONS permissions are required. Darüber hinaus ist die ALTER TABLE-Berechtigung erforderlich, wenn mindestens eine der folgenden Bedingungen zutrifft:Additionally, ALTER TABLE permission is required if one or more of the following is true:

  • Es sind Einschränkungen vorhanden, und die Option CHECK_CONSTRAINTS ist nicht angegeben.Constraints exist and the CHECK_CONSTRAINTS option is not specified.

    Hinweis

    Die Deaktivierung von Einschränkungen wurde als Standardverhalten festgelegt.Disabling constraints is the default behavior. Verwenden Sie die Option CHECK_CONSTRAINTS, um Einschränkungen explizit zu überprüfen.To check constraints explicitly, use the CHECK_CONSTRAINTS option.

  • Es sind Trigger vorhanden, und die Option FIRE_TRIGGER ist nicht angegeben.Triggers exist and the FIRE_TRIGGER option is not specified.

    Hinweis

    Standardmäßig werden Trigger nicht ausgelöst.By default, triggers are not fired. Verwenden Sie die Option FIRE_TRIGGER, um Trigger explizit auszulösen.To fire triggers explicitly, use the FIRE_TRIGGER option.

  • Importieren Sie Identitätswerte mithilfe der Option KEEPIDENTITY aus Datendateien.You use the KEEPIDENTITY option to import identity value from data file.

BeispieleExamples

A.A. Verwenden von |-Zeichen zum Importieren von Daten aus einer DateiUsing pipes to import data from a file

Im folgenden Beispiel werden Bestellinformationen aus der angegebenen Datendatei in die AdventureWorks2012.Sales.SalesOrderDetail-Tabelle importiert, wobei der senkrechte Strich (|) als Feldabschlusszeichen und |\n als Zeilenabschlusszeichen verwendet wird.The following example imports order detail information into the AdventureWorks2012.Sales.SalesOrderDetail table from the specified data file by using a pipe (|) as the field terminator and |\n as the row terminator.

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

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt.Azure SQL Database does not support reading from Windows files.

B.B. Verwenden des FIRE_TRIGGERS-ArgumentsUsing the FIRE_TRIGGERS argument

Im folgenden Beispiel wird das FIRE_TRIGGERS-Argument angegeben.The following example specifies the FIRE_TRIGGERS argument.

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

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt.Azure SQL Database does not support reading from Windows files.

C.C. Verwenden des Zeilenvorschubs als ZeilenabschlusszeichenUsing line feed as a row terminator

Im folgenden Beispiel wird eine Datei importiert, in der der Zeilenvorschub als ein Zeilenabschlusszeichen verwendet wird, z. B. eine UNIX-Ausgabe:The following example imports a file that uses the line feed as a row terminator such as a UNIX output:

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

Hinweis

Abhängig davon, wie Textdateien von Microsoft Windows behandelt werden, wird (\n automatisch durch \r\n) ersetzt.Due to how Microsoft Windows treats text files (\n automatically gets replaced with \r\n).

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt.Azure SQL Database does not support reading from Windows files.

D.D. Angeben einer CodepageSpecifying a code page

In den folgenden Beispielen wird veranschaulicht, wie eine Codepage angegeben wird.The following example show how to specify a code page.

BULK INSERT MyTable
FROM 'D:\data.csv'
WITH
( CODEPAGE = '65001'
   , DATAFILETYPE = 'char'
   , FIELDTERMINATOR = ','
);

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt.Azure SQL Database does not support reading from Windows files.

E.E. Importieren von Daten aus einer CSV-DateiImporting data from a CSV file

Im folgende Beispiel wird gezeigt, wie eine CSV-Datei angegeben wird, bei der die Kopfzeile (erste Zeile) übersprungen, ; als Feldabschlusszeichen und 0x0a als Zeilenabschlusszeichen verwendet wird:The following example show how to specify a CSV file, skipping the header (first row), using ; as field terminator and 0x0a as line terminator:

BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (FORMAT = 'CSV'
      , FIRSTROW=2
      , FIELDQUOTE = '\'
      , FIELDTERMINATOR = ';'
      , ROWTERMINATOR = '0x0a');

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt.Azure SQL Database does not support reading from Windows files.

F.F. Importieren von Daten aus einer Datei in Azure Blob StorageImporting data from a file in Azure blob storage

Das folgende Beispiel zeigt, wie Daten aus einer CSV-Datei in einen Speicherort von Azure Blob Storage geladen werden, für den Sie einen SAS-Schlüssel erstellt haben.The following example shows how to load data from a csv file in an Azure Blob storage location on which you have created a SAS key. Der Speicherort von Azure Blob Storage wird als externe Datenquelle konfiguriert.The Azure Blob storage location is configured as an external data source. Hierfür sind datenbankweit gültige Anmeldeinformationen mit einer Shared Access Signature (SAS) erforderlich, die mit einem Hauptschlüssel in der Benutzerdatenbank verschlüsselt ist.This requires a database scoped credential using a shared access signature that is encrypted using a master key in the user database.

--> Optional - a MASTER KEY is not requred if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword1';
GO
--> Optional - a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';

 -- NOTE: Make sure that you don't have a leading ? in SAS token, and
 -- that you have at least read permission on the object that should be loaded srt=o&sp=r, and
 -- that expiration period is valid (all dates are in UTC time)

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
          LOCATION = 'https://****************.blob.core.windows.net/invoices'
          , CREDENTIAL= MyAzureBlobStorageCredential --> CREDENTIAL is not required if a blob is configured for public (anonymous) access!
);

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');

Wichtig

Das Lesen aus Windows-Dateien wird von Azure SQL-Datenbank nicht unterstützt.Azure SQL Database does not support reading from Windows files.

G.G. Importieren von Daten aus einer Datei im Azure Blob Storage und Festlegen einer FehlerdateiImporting data from a file in Azure blob storage and specifying an error file

Das folgende Beispiel zeigt, wie man Daten aus einer CSV-Datei in einen Azure Blob Storage-Verzeichnis lädt, das als externe Datenquelle konfiguriert wurde und auch eine Fehlerdatei angibt.The following example shows how to load data from a csv file in an Azure blob storage location, which has been configured as an external data source and also specifying an error file. Dies erfordert datenbankweit gültige Anmeldeinformationen, die SAS verwenden.This requires a database scoped credential using a shared access signature. Beachten Sie, dass die Option ERRORFILE, wenn sie auf Azure SQL-Datenbank ausgeführt wird, von ERRORFILE_DATA_SOURCE begleitet werden sollte, da sonst beim Import ein Berechtigungsfehler auftreten könnte.Note that if running on Azure SQL Database, ERRORFILE option should be accompanied by ERRORFILE_DATA_SOURCE otherwise the import might fail with permissions error. Die in ERRORFILE angegebene Datei darf nicht im Container vorhanden sein.The file specified in ERRORFILE should not exist in the container.

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (
         DATA_SOURCE = 'MyAzureInvoices'
         , FORMAT = 'CSV'
         , ERRORFILE = 'MyErrorFile'
         , ERRORFILE_DATA_SOURCE = 'MyAzureInvoices');

Vollständige BULK INSERT-Beispiele einschließlich der Konfiguration der Anmeldeinformation und externen Datenquelle finden Sie unter Beispiele für Massenzugriff auf Daten in Azure Blob Storage.For complete BULK INSERT examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Zusätzliche BeispieleAdditional Examples

Weitere BULK INSERT-Beispiele finden Sie in den folgenden Themen:Other BULK INSERT examples are provided in the following topics:

Weitere InformationenSee Also