Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
Lagerhaus in Microsoft Fabric
Importiert eine Datendatei in eine Datenbanktabelle oder Ansicht in einem vom Benutzer angegebenen Format in SQL Server.
Transact-SQL-Syntaxkonventionen
Syntax
BULK INSERT
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
FROM 'data_file'
[ WITH
(
[ [ , ] DATA_SOURCE = 'data_source_name' ]
-- text formatting options
[ [ , ] CODEPAGE = { 'RAW' | 'code_page' | 'ACP' | 'OEM' } ]
[ [ , ] DATAFILETYPE = { 'char' | 'widechar' | 'native' | 'widenative' } ]
[ [ , ] ROWTERMINATOR = 'row_terminator' ]
[ [ , ] FIELDTERMINATOR = 'field_terminator' ]
[ [ , ] FORMAT = 'CSV' ]
[ [ , ] FIELDQUOTE = 'quote_characters' ]
[ [ , ] FIRSTROW = first_row ]
[ [ , ] LASTROW = last_row ]
-- input file format options
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] FORMATFILE_DATA_SOURCE = 'data_source_name' ]
-- error handling options
[ [ , ] MAXERRORS = max_errors ]
[ [ , ] ERRORFILE = 'file_name' ]
[ [ , ] ERRORFILE_DATA_SOURCE = 'errorfile_data_source_name' ]
-- database options
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] TABLOCK ]
-- source options
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) ]
[ [ , ] ROWS_PER_BATCH = rows_per_batch ]
[ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]
[ [ , ] BATCHSIZE = batch_size ]
) ]
BULK INSERT
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
FROM 'data_file'
[ WITH
(
[ [ , ] DATA_SOURCE = 'data_source_name' ]
-- text formatting options
[ [ , ] CODEPAGE = { 'code_page' | 'ACP' } ]
[ [ , ] DATAFILETYPE = { 'char' | 'widechar' } ]
[ [ , ] ROWTERMINATOR = 'row_terminator' ]
[ [ , ] FIELDTERMINATOR = 'field_terminator' ]
[ [ , ] FORMAT = { 'CSV' | 'PARQUET' } ]
[ [ , ] FIELDQUOTE = 'quote_characters' ]
[ [ , ] FIRSTROW = first_row ]
[ [ , ] LASTROW = last_row ]
-- input file format options
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] FORMATFILE_DATA_SOURCE = 'data_source_name' ]
-- error handling options
[ [ , ] MAXERRORS = max_errors ]
[ [ , ] ERRORFILE = 'file_name' ]
[ [ , ] ERRORFILE_DATA_SOURCE = 'errorfile_data_source_name' ]
) ]
Argumente
Die BULK INSERT-Anweisung weist unterschiedliche Argumente und Optionen auf verschiedenen Plattformen auf. Die Unterschiede sind in der folgenden Tabelle zusammengefasst:
| Merkmal | SQL Server | Azure SQL-Datenbank und azure SQL Managed Instance | Fabric Data Warehouse |
|---|---|---|---|
| Datenquelle | Lokaler Pfad, Netzwerkpfad (UNC) oder Azure Storage | Azure Storage | Azure Storage, One Lake |
| Quellauthentifizierung | Windows-Authentifizierung, SAS | Microsoft Entra ID, SAS-Token, verwaltete Identität | Microsoft Entra-ID |
| Nicht unterstützte Optionen |
* Wildcards im Pfad, FORMAT = 'PARQUET' |
* Wildcards im Pfad, FORMAT = 'PARQUET' |
DATAFILETYPE = {'native' | 'widenative'} |
| Aktivierte Optionen, jedoch ohne Effekt |
KEEPIDENTITY, FIRE_TRIGGERS, CHECK_CONSTRAINTS, TABLOCKORDER, , ROWS_PER_BATCH, KILOBYTES_PER_BATCHund BATCHSIZE sind nicht anwendbar. Sie lösen keinen Syntaxfehler aus, haben aber keine Auswirkung. |
database_name
Der Name der Datenbank, in der sich die angegebene Tabelle oder Sicht befindet. Wenn database_name nicht angegeben wird, wird die aktuelle Datenbank verwendet.
schema_name
Gibt den Name der Tabelle oder des Sichtschemas an. 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
Gibt den Name der Tabelle oder Sicht an, 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 für das Laden von Daten in Ansichten finden Sie unter INSERT.
VON 'data_file'
Gibt den vollständigen Pfad der Datendatei mit den Daten an, die in die angegebene Tabelle oder Sicht importiert werden sollen.
BULK INSERT kann Daten von einer Festplatte oder Azure-Speicher importieren (einschließlich Netzwerk, Diskette, Festplatte usw.).
BULK INSERT bing_covid_19_data
FROM 'C:\\bing_covid-19_data\public\curated\covid-19\latest\bing_covid-19_data.csv';
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 folgendes Format auf: \\SystemName\ShareName\Path\FileName. Beispiel:
BULK INSERT bing_covid_19_data
FROM '\\ShareX\bing_covid-19_data\public\curated\covid-19\latest\bing_covid-19_data.csv';
Azure SQL Database und Fabric Data Warehouse unterstützen das Lesen von Daten aus URI, aber sie unterstützen keine lokalen Dateipfade.
BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv';
Ab SQL Server 2017 (14.x) kann der data_file in Azure Storage liegen. In diesem Fall müssen Sie auch data_source_name Option angeben. Ein Beispiel siehe Daten aus einer Datei in Azure Storage importieren.
Fabric Data Warehouse unterstützt zwei verschiedene Pfadstile zur Spezifizierung des Quellpfads:
https://<storage account>.blob.core.windows.net/<container name>/<path to file>abfss://<container name>@<storage account>.dfs.core.windows.net/<path to file>
Fabric Data Warehouse unterstützt * Wildcards, die mit jedem Zeichen im URI übereinstimmen können, und ermöglicht es Ihnen, ein URI-Muster für die Dateien zu definieren, die importiert werden sollen. Beispiel:
BULK INSERT bing_covid_19_data
FROM 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.csv';
Hinweis
Ersetzen Sie <data-lake>.blob.core.windows.net diese durch eine entsprechende URL.
DATA_SOURCE
Gilt für: SQL Server 2017 (14.x) und spätere Versionen, Azure SQL Database und Warehouse in Microsoft Fabric.
Spezifiziert eine benannte externe Datenquelle, die auf einen Azure Storage-Root-Standort für den Dateiimport verweist.
CREATE EXTERNAL DATA SOURCE pandemicdatalake
WITH (LOCATION = 'https://<data-lake>.blob.core.windows.net/public/');
Hinweis
Ersetzen Sie <data-lake>.blob.core.windows.net diese durch eine entsprechende URL.
Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (CREATE EXTERNAL DATA SOURCE).
Der Dateipfad in der FROM Klausel muss ein relativer Pfad sein, der an den in der externen Datenquelle definierten Root-Standort angehängt wird.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2, LASTROW = 100, FIELDTERMINATOR = ',');
Hinweis
Der Einfachheit halber verwenden die folgenden Beispiele relative Pfade und vordefinierte externe Datenquellen.
CODEPAGE
Gibt die Codepage für die in der Datendatei enthaltenen Daten an.
CODEPAGE ist nur relevant, wenn die Daten Zeichen-, Varchar- oder Textspalten mit Zeichenwerten enthalten, die größer oder kleiner als 127 sind 32. Ein Beispiel finden Sie unter Angeben einer Codepage.
BULK INSERT bing_covid_19_data
FROM '/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2, CODEPAGE = '65001');
CODEPAGE ist keine unterstützte Option unter Linux für SQL Server 2017 (14.x). Für SQL Server 2019 (15.x) ist nur die 'RAW' Option zulässig CODEPAGE.
Sie sollten für jede Spalte in einer Formatdatei einen Sortierungsnamen angeben.
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 (Standardwert) |
Spalten vom Datentyp Char, Varchar oder Text werden von der Systemcodeseite OEM in die SQL Server-Codeseite konvertiert. |
RAW |
Es erfolgt keine Konvertierung von einer Codepage zu einer anderen.
RAW ist die schnellste Option. |
| Codepage | Bestimmte Codepagenummer, z. B. 850. Versionen vor SQL Server 2016 (13.x) unterstützen keine Codepage 65001 (UTF-8-Codierung). |
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. |
| Codepage | Bestimmte Codepagenummer, z. B. 850. Versionen vor SQL Server 2016 (13.x) unterstützen keine Codepage 65001 (UTF-8-Codierung). |
DATAFILETYPE
Gibt an, dass BULK INSERT der Importvorgang mithilfe des angegebenen Datentypwerts ausgeführt wird.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2, DATAFILETYPE = 'char');
Hinweis
Ersetzen Sie <data-lake>.blob.core.windows.net diese durch eine entsprechende URL.
DATAFILETYPE-Wert |
Alle Daten, die in |
|---|---|
char (Standardwert) |
Zeichenformat Für weitere Informationen siehe Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten. |
widechar |
Unicode-Zeichen Für weitere Informationen siehe Verwenden Sie das Unicode-Zeichenformat zum Importieren oder Exportieren von Daten. |
native |
Systemeigene (Datenbank-) Datentypen. Erstellen Sie die native Datendatei durch das Massenimportieren von Daten aus SQL Server mithilfe des Hilfsprogramms bcp. Der Wert native bietet eine höhere Leistung als der Wert char. 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. Weitere Informationen finden Sie unter Verwenden des nativen Formats zum Importieren oder Exportieren von Daten. |
widenative |
Native (Datenbank-) Datentypen, außer in char-, varchar- und text-Spalten, in denen Date als Unicode gespeichert werden. Erstellen Sie die widenative Datendatei durch Massenimport von Daten aus SQL Server mithilfe des bcp-Hilfsprogramms .Der widenative Wert bietet eine Alternative zur höheren Leistung zu widechar. Wenn die Datendatei anSI erweiterte Zeichen enthält, geben Sie an widenative.Weitere Informationen finden Sie unter "Verwenden Sie Unicode Native Format zum Importieren oder Exportieren von Daten". |
DATAFILETYPE-Wert |
Alle Daten, die in |
|---|---|
char (Standardwert) |
Zeichenformat Für weitere Informationen siehe Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten. |
widechar |
Unicode-Zeichen Für weitere Informationen siehe Verwenden Sie das Unicode-Zeichenformat zum Importieren oder Exportieren von Daten. |
MAXERRORS
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.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', MAXERRORS = 0);
Die MAX_ERRORS Option gilt nicht für Constraint-Checks oder für die Umwandlung von Geld und Bigint-Datentypen .
ERRORFILE
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.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake',
ERRORFILE = 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/errors');
Hinweis
Ersetzen Sie <data-lake>.blob.core.windows.net diese durch eine entsprechende URL.
Die Fehlerdatei wird bei Ausführung des Befehls erstellt. Falls die Datei bereits vorhanden ist, tritt ein Fehler auf. Darüber hinaus wird eine Steuerelementdatei mit der Erweiterung .ERROR.txt erstellt, die auf jede Zeile in der Fehlerdatei verweist und Fehlerdiagnosen bereitstellt. Sobald die Fehler korrigiert wurden, können die Daten geladen werden.
Ab SQL Server 2017 (14.x) kann der error_file_path in Azure Storage installiert werden.
ERRORFILE_DATA_SOURCE
Gilt für: SQL Server 2017 (14.x) und höhere Versionen.
Spezifiziert eine benannte externe Datenquelle, die auf den Azure-Speicherstandort der Fehlerdatei verweist, um während des Imports gefundene Fehler nachzuverfolgen.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (
DATA_SOURCE = 'pandemicdatalake',
ERRORFILE = 'curated/covid-19/bing_covid-19_data/latest/errors',
ERRORFILE_DATA_SOURCE = 'pandemicdatalake'
);
Für weitere Details zur Erstellung externer Datenquellen siehe EXTERNE DATENQUELLE ERSTELLEN.
ERSTE REIHE
Gibt die Nummer der ersten zu ladenden Zeile an. In der Standardeinstellung ist dies die erste Zeile in der angegebenen Datendatei.
FIRSTROW basiert auf 1.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIRSTROW = 2);
Das FIRSTROW Attribut soll keine Spaltenüberschriften überspringen. Die BULK INSERT Anweisung unterstützt das Überspringen von Kopfzeilen nicht. Wenn Sie Zeilen überspringen möchten, werden von der SQL Server-Datenbank-Engine nur die Feldabschlusszeichen berücksichtigt und die Daten in den Feldern von übersprungenen Zeilen nicht überprüft.
LASTROW
Gibt die Nummer der letzten zu ladenden Zeile an. Der Standardwert ist 0, wodurch die Daten bis zur letzten Zeile in der angegebenen Datendatei geladen werden.
BATCHGRÖSSE
Gibt die Anzahl von Zeilen in einem Batch an. Jeder Batch wird als eine Transaktion auf den Server kopiert. Falls 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 Überlegungen zur Leistung weiter unten in diesem Artikel.
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 CHECK_CONSTRAINTS Option werden alle CHECK Einschränkungen FOREIGN KEY ignoriert, und nach dem Vorgang wird die Einschränkung für die Tabelle als nicht vertrauenswürdig markiert.
UNIQUE und PRIMARY KEY Einschränkungen werden immer erzwungen. Beim Importieren in eine Zeichenspalte, die mit einer NOT NULL Einschränkung definiert ist, wird eine leere Zeichenfolge eingefügt, BULK INSERT wenn in der Textdatei kein Wert vorhanden ist.
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 die Kosten für die Neuvalidierung der Einschränkung die Kosten für die Anwendung CHECK von Einschränkungen auf die inkrementellen Daten überschreiten.
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 dann Transact-SQL Anweisungen verwenden, um die ungültigen Daten zu entfernen.
Hinweis
Die MAXERRORS Option gilt nicht für die Einschränkungsüberprüfung.
FIRE_TRIGGERS
Gibt an, dass INSERT-Trigger, die für die Zieltabelle definiert sind, während des Massenimportvorgangs ausgeführt werden. Wenn 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, werden keine Einfügetrigger ausgeführt.
KEEPIDENTITY
Gibt an, dass der oder die Identitätswerte in der importierten Datendatei für die Identitätsspalte verwendet werden sollen. Wenn KEEPIDENTITY nicht angegeben, werden die Identitätswerte für diese Spalte überprüft, aber nicht importiert, und SQL Server weist automatisch eindeutige Werte basierend auf dem Startwert und den inkrementellen Werten zu, die während der Tabellenerstellung 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 weist der Spalte automatisch eindeutige Werte zu. Weitere Informationen finden Sie unter DBCC CHECKIDENT.
Für weitere Informationen siehe zum Behalten von Identifikationswerten unter Behalten von Identitätswerten beim Massenimport.
KEEPNULL-ZEICHEN
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 Nulls oder Standardwerte während Massenimport speichern.
KILOBYTES_PER_BATCH
Gibt die ungefähre Datenmenge pro Batch in KB als kilobytes_per_batch an. Standardmäßig ist KILOBYTES_PER_BATCH unbekannt. Informationen zu Leistungsaspekten finden Sie unter Überlegungen zur Leistung weiter unten in diesem Artikel.
BESTELLUNG
Gibt die Vorgehensweise beim Sortieren der Daten in der Datendatei an. 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 als der Reihenfolge eines gruppierten Indexschlüssels sortiert ist oder kein gruppierter Index in der Tabelle vorhanden ist, wird die ORDER-Klausel ignoriert. Die angegebenen Spaltennamen müssen gültige Spaltennamen in der Zieltabelle sein. Standardmäßig geht der Masseneinfügevorgang davon aus, dass die Datendatei nicht sortiert ist. Beim optimierten Massenimport wird in SQL Server auch überprüft, ob die importierten Daten sortiert sind.
n ist ein Platzhalter, der anzeigt, dass mehrere Spalten angegeben werden können.
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 (mit einem Wert ROWS_PER_BATCH 0) angeben > , verwendet der Server diesen Wert, um den Massenimportvorgang zu optimieren. Der angegebene ROWS_PER_BATCH Wert sollte ungefähr der tatsächlichen Anzahl von Zeilen entsprechen. Informationen zu Leistungsaspekten finden Sie unter Überlegungen zur Leistung weiter unten in diesem Artikel.
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 loadbestimmt. 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 Überlegungen zur Leistung weiter unten in diesem Artikel.
Bei einem Columnstore-Index unterscheidet sich das Sperrverhalten, da er intern in mehrere Rowsets unterteilt ist. Jeder Thread lädt Daten exklusiv in jedes Rowset, indem eine exklusive (X)-Sperre für das Rowset verwendet wird, sodass parallele Daten mit gleichzeitigen Datenladesitzungen geladen werden können. Die Verwendung der TABLOCK Option bewirkt, dass der Thread eine exklusive Sperre für die Tabelle (im Gegensatz zur BU-Sperre für herkömmliche Rowsets) verwendet, wodurch andere gleichzeitige Threads gleichzeitig geladen werden.
Formatoptionen der Eingabedatei
FORMAT
Gilt für: SQL Server 2017 (14.x) und höhere Versionen.
Gibt eine CSV-Datei an, die dem Standard RFC 4180 entspricht.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FORMAT = 'CSV');
Im Fabric Data Warehouse unterstützt die BULK INSERT Ausweisung die gleichen Formate wie die Anweisung COPY INTO und FORMAT = 'PARQUET' wird daher ebenfalls unterstützt.
FIELDQUOTE
Gilt für: SQL Server 2017 (14.x) und höhere Versionen.
Gibt ein Zeichen an, das als Anführungszeichen in der CSV-Datei verwendet werden soll. Wenn nicht angegeben, wird das Anführungszeichen (") als Anführungszeichen verwendet, wie im RFC 4180-Standard definiert.
FORMATFILE
Gibt den vollständigen Pfad einer Formatdatei an. 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.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake',
FORMATFILE = 'https://<data-lake>.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt');
Hinweis
Ersetzen Sie <data-lake>.blob.core.windows.net diese durch eine entsprechende URL.
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 Hilfsprogramm bcp erstellt und nach Bedarf mit einem Text-Editor geändert. Weitere Informationen finden Sie unter bcp Utility und Erstellen Sie eine Formatdatei mit bcp.
Ab SQL Server 2017 (14.x) und in Azure SQL Database format_file_path kann es in Azure Storage sein.
FORMATFILE_DATA_SOURCE
Gilt für: SQL Server 2017 (14.x) und höhere Versionen.
Spezifiziert eine benannte externe Datenquelle, die auf den Azure-Speicherstandort der Formatdatei verweist, um das Schema der importierten Daten zu definieren.
BULK INSERT bing_covid_19_data
FROM 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (
DATA_SOURCE = 'pandemicdatalake',
FORMATFILE = 'curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt',
FORMATFILE_DATA_SOURCE = 'pandemicdatalake'
);
FIELDTERMINATOR
Spezifiziert den Feldterminator, der für char und widechar Datendateien verwendet werden soll. Standardmäßig wird \t (Tabstoppzeichen) als Feldabschlusszeichen verwendet. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenbeschlusszeichen.
BULK INSERT bing_covid_19_data
FROM '/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', FIELDTERMINATOR = ',', FIRSTROW = 2);
ROWTERMINATOR
Spezifiziert den Zeilenterminator, der für char und widechar die Datendateien verwendet werden soll.
BULK INSERT bing_covid_19_data
FROM '/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (DATA_SOURCE = 'pandemicdatalake', ROWTERMINATOR = '\r\n', FIRSTROW = 2);
Der Standardzeilenendator ist \r\n (Wagenrücklauf und Zeilenumbruch). Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenbeschlusszeichen.
Kompatibilität
BULK INSERT erzwingt strenge Datenüberprüfungen und Datenüberprüfungen von Daten, die aus einer Datei gelesen werden, die dazu führen kann, dass vorhandene Skripts fehlschlagen, wenn sie für ungültige Daten ausgeführt werden. Überprüft beispielsweise folgendes BULK INSERT :
- Die native Darstellung der Datentypen float oder real ist gültig.
- Unicode-Daten besitzen eine gerade Bytelänge.
Datentypen
Konvertierungen von Zeichenfolgen- in Dezimaldatentypen
Die Zeichenfolgen-zu-Dezimal-Datentypkonvertierungen, die verwendet BULK INSERT werden, entsprechen den gleichen Regeln wie die Transact-SQL CONVERT-Funktion , die Zeichenfolgen zurückweist, die numerische Werte darstellen, die die wissenschaftliche Schreibweise verwenden.
BULK INSERT Behandelt daher solche Zeichenfolgen als ungültige Werte und meldet Konvertierungsfehler.
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.
Formatdateien stellen real-Daten als SQLFLT4-Datentyp und float-Daten als SQLFLT8-Datentyp dar. Informationen zu Dateien im Nicht-XML-Format finden Sie unter Dateispeichertyp mit bcp angeben.
Beispiel für das Importieren eines numerischen Werts in wissenschaftlicher Schreibweise
In diesem Beispiel wird die folgende Tabelle in der Datenbank bulktest verwendet:
CREATE TABLE dbo.t_float
(
c1 FLOAT,
c2 DECIMAL (5, 4)
);
Der Benutzer möchte nun per Massenimport Daten in die t_float-Tabelle kopieren. Die Datendatei enthält C:\t_float-c.datwissenschaftliche Schreibweise float-Daten , z. B.:
8.0000000000000002E-2 8.0000000000000002E-2
Beachten Sie beim Kopieren dieses Beispiels, dass manche Text-Editoren und Codierungen die Tabstoppzeichen (\t) als Leerzeichen speichern. Ein Tabstoppzeichen wird später in diesem Beispiel erwartet.
BULK INSERT Diese Daten können jedoch nicht direkt in t_floatdie zweite Spalte importiert werden, c2da die zweite Spalte den Dezimaldatentyp 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 datentyp SQLFLT8 , um das zweite Datenfeld der zweiten Spalte zuzuordnen:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://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>
Um diese Formatdatei (mit dem Dateinamen C:\t_floatformat-c-xml.xml) zum Importieren der Testdaten in die Testtabelle zu verwenden, geben Sie die folgende Transact-SQL-Anweisung aus:
BULK INSERT bulktest.dbo.t_float
FROM 'C:\t_float-c.dat'
WITH (FORMATFILE = 'C:\t_floatformat-c-xml.xml');
Wichtig
Azure SQL Database und Fabric Data Warehouse unterstützen nur das Lesen von URI (zum Beispiel Azure Storage).
Datentypen für den Massenexport bzw. -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 SQLVARCHAR- | Die Daten werden in der Clientcodepage gesendet bzw. in der durch die Sortierung implizierten Codeseite. Der Effekt entspricht dem Angeben der DATAFILETYPE = 'char' ohne Angabe einer Formatdatei. |
| SQLNCHAR- oder SQLNVARCHAR- | Die Daten werden im Unicode-Format gesendet. Der Effekt entspricht dem Angeben der DATAFILETYPE = 'widechar' ohne Angabe einer Formatdatei. |
| SQLBINARY- oder SQLVARBIN- | Die Daten werden ohne Konvertierung gesendet. |
Hinweise
Für einen Vergleich der BULK INSERT Anweisung, der INSERT ... SELECT * FROM OPENROWSET(BULK...) Anweisung und des bcp Befehls siehe Massenimport und -export von Daten.
Informationen zum Vorbereiten von Daten für den Massenimport finden Sie unter Vorbereiten von Daten für den Massenexport oder -import.
Die BULK INSERT Anweisung kann innerhalb einer benutzerdefinierten Transaktion ausgeführt werden, um Daten in eine Tabelle oder Ansicht zu importieren. Wenn Sie optional mehrere Übereinstimmungen zum Massenimport von Daten verwenden möchten, kann eine Transaktion die BATCHSIZE Klausel in der BULK INSERT Anweisung angeben. Wenn eine Mehrfachbatchtransaktion zurückgesetzt wird, wird jeder Batch, den die an SQL Server gesendete Transaktion zurückgesetzt hat, zurückgesetzt.
Interoperabilität
Daten aus einer CSV-Datei importieren.
Ab SQL Server 2017 (14.x) BULK INSERT wird das CSV-Format wie die Azure SQL-Datenbank unterstützt.
Vor SQL Server 2017 (14.x) wurden CSV-Dateien bei SQL Server-Massenimportvorgängen nicht unterstützt. In manchen Fällen kann jedoch eine CSV-Datei als Datendatei für einen Massenimport von Daten in SQL Serververwendet werden. Informationen zu den Anforderungen für das Importieren von Daten aus einer CSV-Datendatei finden Sie unter Vorbereiten von Daten für den Massenexport oder -import.
Protokollverhalten
Informationen dazu, wann Zeileneinfügungsvorgänge, die vom Massenimport in SQL Server ausgeführt werden, im Transaktionsprotokoll protokolliert werden, finden Sie unter Voraussetzungen für die minimale Protokollierung im Massenimport. Die minimale Protokollierung wird in Azure SQL-Datenbank nicht unterstützt.
Einschränkungen
Bei Verwendung einer Formatdatei mit BULK INSERTkönnen Sie nur bis zu 1.024 Felder angeben. Dieser Höchstwert entspricht der maximalen Zahl zulässiger Spalten in einer Tabelle. Wenn Sie eine Formatdatei mit BULK INSERT einer Datendatei verwenden, die mehr als 1.024 Felder enthält, BULK INSERT wird der Fehler 4822 generiert. Das bcp-Hilfsprogramm hat diese Einschränkung nicht, daher verwenden Sie für Datendateien, die mehr als 1.024 Felder enthalten, ohne formatdatei zu verwenden BULK INSERT oder den Befehl "bcp " zu verwenden.
Überlegungen zur Leistung
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 nicht den TABLOCK Hinweis (wodurch die Massenoptimierungen entfernt werden) oder verwenden Sie eine kleinere Batchgröße (wodurch die Massenoptimierungen erhalten bleiben).
Sie sollten verschiedene Batchgrößen mit den geladenen Daten testen, um die optimale Vorgehensweise zu bestimmen. Beachten Sie, dass die Batchgröße Auswirkungen auf teilweise Rollbacks hat. Wenn ihr Prozess fehlschlägt und bevor Sie es erneut verwenden BULK INSERT , müssen Sie möglicherweise zusätzliche manuelle Schritte ausführen, um einen Teil der Zeilen zu entfernen, die erfolgreich eingefügt wurden, bevor ein Fehler aufgetreten ist.
Bei Azure SQL-Datenbank sollten Sie die Leistungsstufe der Datenbank oder Instanz vor dem Import vorübergehend erhöhen, wenn Sie ein großes Datenvolumen importieren.
Sicherheit
Delegierung von Sicherheitskonten (Identitätswechsel)
Wenn ein Benutzer einen SQL Server -Anmeldenamen verwendet, wird das Sicherheitsprofil des SQL Server -Prozesskontos verwendet. Eine Anmeldung mit SQL Server-Authentifizierung kann nicht außerhalb der Datenbank-Engine authentifiziert werden. Daher wird beim Initiieren eines BULK INSERT Befehls mithilfe der SQL Server-Authentifizierung die Verbindung mit den Daten mithilfe des Sicherheitskontexts des SQL Server-Prozesskontos (das vom SQL Server-Datenbankmoduldienst verwendete Konto) hergestellt.
Um die Quelldaten erfolgreich zu lesen, müssen Sie dem vom SQL Server-Datenbankmodul verwendeten Konto Zugriff auf die Quelldaten gewähren. Wenn sich hingegen ein SQL Server -Benutzer mithilfe der Windows-Authentifizierung anmeldet, können von diesem Benutzer nur die Dateien gelesen werden, auf die über das Benutzerkonto zugegriffen werden kann. Das Sicherheitsprofil des SQL Server -Prozesses wird dabei nicht berücksichtigt.
Wenn Sie die BULK INSERT Anweisung mithilfe von sqlcmd oder osql von einem Computer aus ausführen, Daten auf einem zweiten Computer in SQL Server einfügen und eine data_file auf einem dritten Computer mithilfe eines UNC-Pfads angeben, wird möglicherweise ein Fehler von 4861 angezeigt.
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 für die Verwendung BULK INSERTfinden Sie unter VERWENDEN VON BULK INSERT oder OPENROWSET(BULK...), um Daten in SQL Server zu importieren.
Wenn du aus Azure Storage importierst und die Daten nicht öffentlich sind (anonymer Zugriff), erstelle eine DATABASE SCOPED CREDENTIAL basierend auf einem SAS-Schlüssel, der mit einem Datenbank-Hauptschlüssel (DMK) verschlüsselt ist, und erstelle dann eine externe Datenbankquelle für deinen BULK INSERT Befehl.
Alternativ können Sie DATABASE SCOPED CREDENTIAL basierend auf MANAGED IDENTITY erstellen, um Anforderungen für den Datenzugriff in nicht öffentlichen Speicherkonten zu autorisieren. Bei Verwendung MANAGED IDENTITYmuss Azure Storage Berechtigungen für die verwaltete Identität der Instanz gewähren, indem die Storage Blob Data Contributor integrierte Azure-Rolle für rollenbasierte Zugriffskontrolle (RBAC) hinzugefügt wird, die Lese-/Schreibzugriff auf die verwaltete Identität für die notwendigen Azure Storage-Container bietet. Azure SQL Managed Instance verfügt über eine systemseitig zugewiesene verwaltete Identität und kann auch mindestens eine benutzerseitig zugewiesene verwaltete Identität umfassen. Für die Autorisierung der Anforderungen können Sie entweder systemseitig oder benutzerseitig zugewiesene verwaltete Identitäten verwenden. Zur Autorisierung wird die default Identität der verwalteten Instanz verwendet (d. h. die primäre vom Benutzer zugewiesene verwaltete Identität oder die vom System zugewiesene verwaltete Identität, wenn die vom Benutzer zugewiesene verwaltete Identität nicht angegeben ist). Ein Beispiel siehe Daten aus einer Datei in Azure Storage importieren.
Wichtig
Managed Identity gilt für Azure SQL und SQL Server 2025 (17.x) und spätere Versionen.
Berechtigungen
Die folgenden Berechtigungen gelten für den Speicherort, an dem die Daten massenimportiert werden (das Ziel).
Erfordert INSERT und ADMINISTER BULK OPERATIONS Berechtigungen. In Der Azure SQL-Datenbank INSERT sind Berechtigungen ADMINISTER DATABASE BULK OPERATIONS erforderlich.
ADMINISTER BULK OPERATIONS Berechtigungen oder die Bulkadmin-Rolle werden für SQL Server unter Linux nicht unterstützt. Nur der sysadmin kann Masseneinfügungen in SQL Server für Linux durchführen.
Darüber hinaus ist die Berechtigung erforderlich, ALTER TABLE wenn mindestens eine der folgenden Bedingungen zutrifft:
Einschränkungen sind vorhanden, und die
CHECK_CONSTRAINTSOption wird nicht angegeben.Die Deaktivierung von Einschränkungen wurde als Standardverhalten festgelegt. Verwenden Sie die
CHECK_CONSTRAINTSOption, um Einschränkungen explizit zu überprüfen.Trigger sind vorhanden, und die
FIRE_TRIGGEROption ist nicht angegeben.Standardmäßig werden Trigger nicht ausgelöst. Verwenden Sie die
FIRE_TRIGGEROption, um Trigger explizit auszulösen.Sie verwenden die
KEEPIDENTITYOption zum Importieren des Identitätswerts aus der Datendatei.
Beispiele
Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.
Wichtig
Azure SQL Database und Fabric Warehouse unterstützen nur das Lesen aus Azure Storage.
Ein. Verwenden von |-Zeichen zum Importieren von Daten aus einer Datei
Im folgenden Beispiel werden Bestellinformationen aus der angegebenen Datendatei in die AdventureWorks2022.Sales.SalesOrderDetail-Tabelle importiert, wobei der senkrechte Strich (|) als Feldabschlusszeichen und |\n als Zeilenabschlusszeichen verwendet wird.
BULK INSERT AdventureWorks2022.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 AdventureWorks2022.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 AS VARCHAR (1000);
SET @bulk_cmd = 'BULK INSERT AdventureWorks2022.Sales.SalesOrderDetail
FROM ''<drive>:\<path>\<filename>''
WITH (ROWTERMINATOR = ''' + CHAR(10) + ''')';
EXECUTE (@bulk_cmd);
Hinweis
Unter Windows \n wird automatisch durch \r\n.
D: Angeben einer Codepage
In den folgenden Beispielen wird veranschaulicht, wie eine Codepage angegeben wird.
BULK INSERT MyTable
FROM 'D:\data.csv'
WITH (CODEPAGE = '65001', DATAFILETYPE = 'char', FIELDTERMINATOR = ',');
E. Daten aus einer CSV-Datei importieren.
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:
BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDQUOTE = '\',
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0x0a'
);
Im folgende Beispiel wird gezeigt, wie eine CSV-Datei im UTF-8-Format (mit CODEPAGE = 65001) angegeben wird, bei der die Kopfzeile (erste Zeile) übersprungen, ; als Feldabschlusszeichen und 0x0a als Zeilenabschlusszeichen verwendet wird:
BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (
CODEPAGE = '65001',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDQUOTE = '\',
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0x0a'
);
F. Daten aus einer Datei in Azure Storage importieren
Daten aus einer CSV in Azure Storage mit SAS-Token laden
Das folgende Beispiel zeigt, wie man Daten aus einer CSV-Datei in einem Azure Storage-Standort lädt, auf dem Sie eine Shared Access Signature (SAS) erstellt haben. Der Azure-Speicherstandort ist als externe Datenquelle konfiguriert, was eine datenbankbezogene Zugangsdaten mit einem SAS-Schlüssel erfordert, der mit einem DMK in der Benutzerdatenbank verschlüsselt ist.
Hinweis
Stelle sicher, dass du keine Führung ? im SAS-Token hast, dass du zumindest eine Leseberechtigung für das Objekt hast, das geladen srt=o&sp=rwerden soll, und dass die Verfallsfrist gültig ist (alle Daten liegen in UTC-Zeit).
(Optional) Ein DMK ist nicht erforderlich, wenn ein DATABASE SCOPED CREDENTIAL nicht erforderlich ist, da der Blob für öffentlichen (anonymen) Zugriff konfiguriert ist.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
(Optional) A DATABASE SCOPED CREDENTIAL ist nicht erforderlich, weil der Blob für öffentlichen (anonymen) Zugriff konfiguriert ist.
Füge keine Führung ? im SAS-Token hinzu. Stelle sicher, dass du zumindest die Leseberechtigung für das Objekt hast, das geladen werden soll (srt=o&sp=r), und dass die Ablauffrist gültig ist (alle Daten liegen in UTC-Zeit).
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***************';
Hinweis
CREDENTIAL ist nicht erforderlich, wenn ein Blob für öffentlichen (anonymen) Zugriff konfiguriert ist.
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/invoices',
CREDENTIAL = MyAzureBlobStorageCredential
);
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');
Daten aus einer CSV in Azure Storage mit einer verwalteten Identität laden
Das folgende Beispiel zeigt, wie man den BULK INSERT Befehl verwendet, um Daten aus einer CSV-Datei in einem Azure-Speicherstandort mit Managed Identity zu laden. Der Azure Storage-Standort ist als externe Datenquelle konfiguriert.
(Optional) Ein DMK ist nicht erforderlich, wenn ein DATABASE SCOPED CREDENTIAL nicht erforderlich ist, da der Blob für öffentlichen (anonymen) Zugriff konfiguriert ist.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
(Optional) A DATABASE SCOPED CREDENTIAL ist nicht erforderlich, da der Blob für öffentlichen (anonymen) Zugriff konfiguriert ist:
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'Managed Identity';
Gewähren Sie die Rolle Storage Blob Data Contributor, um Lese-/Schreibzugriff auf die verwaltete Identität für die notwendigen Azure Storage Container zu gewähren.
Hinweis
CREDENTIAL ist nicht erforderlich, wenn ein Blob für öffentlichen (anonymen) Zugriff konfiguriert ist.
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/invoices',
CREDENTIAL = MyAzureBlobStorageCredential
);
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');
Wichtig
Managed Identity gilt für SQL Server 2025 (17.x) und neuere Versionen sowie Azure SQL.
G. Importiere Daten aus einer Datei in Azure Storage und gib eine Fehlerdatei an
Das folgende Beispiel zeigt, wie man Daten aus einer CSV-Datei in einem Azure Storage-Standort lädt, der als externe Datenquelle konfiguriert ist, und zudem eine Fehlerdatei angibt. Sie benötigen eine datenbankbezogene Anmeldeinformationen mithilfe einer freigegebenen Zugriffssignatur. Wenn es auf Azure SQL Database läuft, ERRORFILE sollte die Option von ERRORFILE_DATA_SOURCE, sonst könnte der Import mit einem Berechtigungsfehler fehlschlagen. Die in ERRORFILE der Datei angegebene Datei sollte nicht im Container vorhanden sein.
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (
DATA_SOURCE = 'MyAzureInvoices',
FORMAT = 'CSV',
ERRORFILE = 'MyErrorFile',
ERRORFILE_DATA_SOURCE = 'MyAzureInvoices'
);
Für vollständige BULK INSERT Beispiele, einschließlich der Konfiguration der Zugangsdaten und der externen Datenquelle, siehe Beispiele für Massenzugriff auf Daten in Azure Storage.
Weitere Beispiele anzeigen
Weitere Beispiele für BULK INSERT finden Sie in den folgenden Artikeln:
- Beispiele für den Massenimport und Export von XML-Dokumenten
- Behalten Sie die Identitätswerte beim Massenimport von Daten
- Behalten Sie Null- oder Standardwerte während des Massenimports
- Spezifizieren Sie Feld- und Zeilen-Terminatoren
- Verwenden Sie eine Formatdatei zum Massenimport von Daten
- Verwenden Sie das Zeichenformat zum Importieren oder Exportieren von Daten
- Verwenden Sie das native Format, um Daten zu importieren oder zu exportieren
- Verwenden Sie das Unicode-Zeichenformat zum Importieren oder Exportieren von Daten
- Verwenden Sie das Unicode-Native-Format, um Daten zu importieren oder zu exportieren
- Verwenden Sie eine Formatdatei, um eine Tabellenspalte zu überspringen
- Verwenden Sie eine Formatdatei, um Tabellenspalten auf Dateifelder abzubilden