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
SQL-Analyseendpunkt in Microsoft Fabric
Lagerhaus in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric
Die OPENROWSET Funktion liest Daten aus einer oder mehreren Dateien und gibt den Inhalt als Rowset zurück. Je nach Dienst kann die Datei in Azure Blob Storage, Azure Data Lake Storage, On-Premises-Festplatten, Netzwerkfreigaben und mehr gespeichert werden. Man kann verschiedene Dateiformate wie Text/CSV, Parquet oder JSON-Lines lesen.
Man kann die OPENROWSET Funktion in der FROM Klausel einer Abfrage referenzieren, als wäre es ein Tabellenname. Verwenden Sie es, um Daten in einer SELECT Anweisung auszulesen oder um Zieldaten in den UPDATE, INSERT, DELETE, MERGE, , CTAS, oder CETAS Anweisungen zu aktualisieren.
- Nutze es
OPENROWSET(BULK), um Daten aus externen Datendateien zu lesen. - Nutze
OPENROWSETohneBULKLese, um von einer anderen Datenbank-Engine zu lesen. Weitere Informationen finden Sie unter OPENROWSET (Transact-SQL).
Tip
Dieser Artikel und die Syntax OPENROWSET(BULK) unterscheiden sich auf verschiedenen Plattformen der SQL Datenbank-Engine.
Für Microsoft Fabric Data Warehouse Syntax wählen Sie Fabric Data Warehouse in der Versions-Dropdown-Liste aus.
Details und Links zu ähnlichen Beispielen auf anderen Plattformen:
- Weitere Informationen zur
OPENROWSETAzure SQL-Datenbank finden Sie unter "Datenvirtualisierung mit Azure SQL-Datenbank". - Weitere Informationen zu
OPENROWSETazure SQL Managed Instance finden Sie unter Data Virtualization with Azure SQL Managed Instance. - Informationen und Beispiele mit serverlosen SQL-Pools in Azure Synapse finden Sie unter Verwendung von OPENROWSET mit serverlosen SQL-Pool in Azure Synapse Analytics.
- Dedizierte SQL-Pools in Azure Synapse unterstützen die
OPENROWSETFunktion nicht.
Transact-SQL-Syntaxkonventionen
Syntax
Für SQL Server, Azure SQL-Datenbank, SQL Database in Fabric und Azure SQL Managed Instance:
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
FORMATFILE = 'format_file_path' |
FORMATFILE_DATA_SOURCE = 'data_source_name' |
SINGLE_BLOB |
SINGLE_CLOB |
SINGLE_NCLOB |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
ERRORFILE_DATA_SOURCE = 'data_source_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ] |
ROWS_PER_BATCH = rows_per_batch
Syntax für Fabric Data Warehouse
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
ESCAPECHAR = 'escape_char' |
HEADER_ROW = [true|false] |
PARSER_VERSION = 'parser_version' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ROWS_PER_BATCH = rows_per_batch
Einige OPENROWSET Optionen sind formatspezifisch, während andere universell sind. Zeilen- und Feldtrennzeichen sind beispielsweise nur für durch Trennzeichen getrenntem Text (CSV/TSV) aussagekräftig, während Optionen wie DATA_SOURCE und MAXERRORS für alle Formate gelten. Die folgende Tabelle fasst zusammen, welche Optionen für die gebräuchlichsten Formate unterstützt werden.
| Options | CSV(1.0) | CSV(2.0) | PARKETT | JSONL |
|---|---|---|---|---|
| DATA_SOURCE, ROWS_PER_BATCH, MAXERRORS | Supported | Supported | Supported | Supported |
| ERRORFILE, ERRORFILE_DATA_SOURCE, FORMATFILE, FORMATFILE_DATA_SOURCE | Supported | Supported | Nicht unterstützt | Supported |
| CODEPAGE, DATEFILETYPE | Supported | Supported | Nicht unterstützt | Supported |
| ERSTE REIHE | Supported | Supported | Nicht unterstützt | Supported |
| ROWTERMINATOR, FIELDTERMINATOR, FIELDQUOTE, ESCAPECHAR | Supported | Supported | Nicht unterstützt | Nicht unterstützt |
| PARSER_VERSION | Supported | Supported | Nicht unterstützt | Nicht unterstützt |
| LASTROW | Supported | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt |
| HEADER_ROW | Nicht unterstützt | Supported | Nicht unterstützt | Nicht unterstützt |
| SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt |
Arguments
Die Argumente der BULK Option ermöglichen eine erhebliche Kontrolle darüber, wo Daten beginnen und enden sollen, wie Fehler behandelt werden und wie Daten interpretiert werden. Sie können z. B. angeben, dass die Datendatei als einspaltiges, einspaltiges Rowset vom Typ varbinary, varchar oder nvarchar gelesen wird. Das Standardverhalten ist in den folgenden Argumentbeschreibungen erläutert.
Informationen zur Verwendung der BULK Option finden Sie im Abschnitt "Hinweise " weiter unten in diesem Artikel. Informationen zu den Berechtigungen, die für die BULK Option erforderlich sind, finden Sie im Abschnitt Berechtigungen später in diesem Artikel.
Informationen zum Vorbereiten von Daten für den Massenimport finden Sie unter Vorbereiten von Daten für den Massenexport oder -import.
BULK
Der Pfad oder URI der Datendateien, der OPENROWSET als Zeilensatz gelesen und zurückgegeben wird.
Der URI kann auf Azure Data Lake Storage oder Azure Blob Storage verweisen. Der URI der Datendatei(n), deren Daten gelesen und als Zeilensatz zurückgegeben werden sollen.
Die unterstützten Pfadformate sind:
-
<drive letter>:\<file path>für den Zugriff auf Dateien auf einem lokalen Datenträger -
\\<network-share\<file path>für den Zugriff auf Dateien auf Netzwerkfreigaben -
adls://<container>@<storage>.dfs.core.windows.net/<file path>zugriff auf Azure Data Lake Storage -
abs://<storage>.blob.core.windows.net/<container>/<file path>für den Zugriff auf Azure Blob Storage -
s3://<ip-address>:<port>/<file path>für den Zugriff auf s3-kompatiblen Speicher
Note
Dieser Artikel und die unterstützten URI-Muster unterscheiden sich auf verschiedenen Plattformen. Für die URI-Muster, die in Microsoft Fabric Data Warehouse verfügbar sind, wählen Sie Fabric Data Warehouse in der Versions-Dropdown-Liste aus.
Ab SQL Server 2017 (14.x) kann sich die data_file in Azure Blob Storage befinden. Beispiele finden Sie unter Beispiele für den Massenzugriff auf Daten in Azure Blob Storage.
-
https://<storage>.blob.core.windows.net/<container>/<file path>für den Zugriff auf Azure Blob Storage oder Azure Data Lake Storage -
https://<storage>.dfs.core.windows.net/<container>/<file path>zugriff auf Azure Data Lake Storage -
abfss://<container>@<storage>.dfs.core.windows.net/<file path>zugriff auf Azure Data Lake Storage -
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/<file path>- um auf OneLake in Microsoft Fabric zuzugreifen
Wenn Sie auf Daten zugreifen, die in Azure Data Lake Storage Gen2 gespeichert sind, verwenden Sie das abfss://<container>@<storage>.dfs.core.windows.net/<file path> oder https://<storage>.dfs.core.windows.net/<container>/<file path> das URI-Format anstelle des Blob-Endpunkts. Beide bieten vollständige Unterstützung für den hierarchischen Namensraum (HNS), der Verzeichnissemantik, optimierte Dateioperationen und POSIX-ähnliche Zugriffskontrolllisten (ACLs) ermöglicht.
Im Gegensatz dazu stellt der blob Endpunkt keine hierarchischen Namensraummerkmale offen und behandelt alle Pfade als flache Objektschlüssel. Dies kann zu geringerer Leistung, eingeschränktem Verzeichnisverhalten und Inkompatibilität mit Engines führen, die die Semantik des Azure Data Lake Storage Gen2-Dateisystems erwarten.
Note
Dieser Artikel und die unterstützten URI-Muster unterscheiden sich auf verschiedenen Plattformen. Wählen Sie für die in SQL Server, Azure SQL-Datenbank und Azure SQL Managed Instance verfügbaren URI-Muster das Produkt in der Dropdownliste der Version aus.
Die URI kann das * Zeichen so enthalten, dass es jede beliebige Zeichenfolge übereinstimmt, und OPENROWSET kann daher mit dem URI ein Muster abgleichen. Außerdem kann die URI enden /** , um rekursive Durchlauf durch alle Unterordner zu ermöglichen. In SQL Server ist dieses Verhalten ab SQL Server 2022 (16.x) verfügbar.
Beispiel:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<scheme:>//pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);
Die folgende Tabelle zeigt die Speichertypen, auf die die URI verweisen kann:
| Version | On-premises | Azure Storage | OneLake in Fabric | S3 | Google Cloud (GCS) |
|---|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | Yes | Nein | Nein | Nein |
| SQL Server 2022 (16.x) | Yes | Yes | Nein | Yes | Nein |
| Azure SQL-Datenbank | Nein | Yes | Nein | Nein | Nein |
| Verwaltete Azure SQL-Instanz | Nein | Yes | Nein | Nein | Nein |
| Serverloser SQL-Pool in Azure Synapse Analytics | Nein | Yes | Yes | Nein | Nein |
| Microsoft Fabric Warehouse in Microsoft Fabric und SQL Analytics-Endpunkt in Microsoft Fabric | Nein | Yes | Yes | Ja, ich benutze OneLake in Fabric-Abkürzungen | Ja, ich benutze OneLake in Fabric-Abkürzungen |
| SQL-Datenbank in Microsoft Fabric | Nein | Ja, ich benutze OneLake in Fabric-Abkürzungen | Yes | Ja, ich benutze OneLake in Fabric-Abkürzungen | Ja, ich benutze OneLake in Fabric-Abkürzungen |
Sie können OPENROWSET(BULK) Daten direkt aus Dateien lesen, die im OneLake in Microsoft Fabric gespeichert sind, speziell aus dem Dateiordner eines Fabric Lakehouse. Diese Funktion beseitigt externe Staging-Konten (wie ADLS Gen2 oder Blob Storage) und ermöglicht workspace-gesteuerte, SaaS-native Ingestion mittels Fabric-Berechtigungen. Diese Funktionalität unterstützt Folgendes:
- Lesen aus
FilesOrdnern in Lakehouses - Arbeitsbereich-zu-Lager-Lasten innerhalb desselben Mandanten
- Erzwingung nativer Identitäten mithilfe der Microsoft Entra-ID
Siehe die Einschränkungen, die sowohl für als OPENROWSET(BULK)auch COPY INTO gelten.
DATA_SOURCE
DATA_SOURCE definiert den Stammspeicherort des Datendateipfads. Es ermöglicht dir, relative Pfade im BULK Pfad zu verwenden. Erstelle die Datenquelle mit CREATE EXTERNAL DATA SOURCE.
Zusätzlich zum Root-Standort kann es eine benutzerdefinierte Zugangsberechtigung definieren, um auf die Dateien an diesem Speicherort zuzugreifen.
Beispiel:
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<scheme:>//pandemicdatalake.blob.core.windows.net/public')
GO
SELECT *
FROM OPENROWSET(
BULK '/curated/covid-19/bing_covid-19_data/latest/*.parquet',
DATA_SOURCE = 'root'
);
Dateiformatoptionen
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 mehr als 127 oder kleiner als 32 enthalten. Die gültigen Werte sind ACP, OEM, , RAWoder eine bestimmte Codeseite:
| CODEPAGE-Wert | Description |
|---|---|
ACP |
Konvertiert Spalten mit Zeichen-, Varchar- oder Textdatentyp von der ANSI/Microsoft Windows-Codeseite (ISO 1252) in die SQL Server-Codeseite. |
OEM (Standardwert) |
Konvertiert Spalten mit Char-, Varchar- oder Textdatentyp von der SYSTEM-OEM-Codeseite in die SQL Server-Codeseite. |
RAW |
Es erfolgt keine Konvertierung in eine andere Codepage. Dies ist die schnellste Option. |
| Integer | Gibt die Quellcodepage an, nach der die Zeichendaten in der Datendatei codiert werden, beispielsweise 850. |
Important
Versionen vor SQL Server 2016 (13.x) unterstützen keine Codepage 65001 (UTF-8-Codierung).
CODEPAGE ist keine unterstützte Option unter Linux.
Note
Es wird empfohlen, dass Sie für jede Spalte in einer Formatdatei einen Sortierungsnamen angeben, außer wenn die 65001-Option Priorität vor der Angabe von Sortierung/Codepage haben soll.
DATAFILETYPE
Spezifiziert, dass OPENROWSET(BULK) Einzelbyte- (ASCII, UTF8) oder Multibyte-Dateiinhalte (UTF16) gelesen werden sollen. Die gültigen Werte sind Zeichen und Breite:
DATAFILETYPE Wert |
Alle Daten, die dargestellt sind in: |
|---|---|
| char (Standard) | Zeichenformat. Weitere Informationen finden Sie unter Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten. |
| widechar | Unicode-Zeichen. Weitere Informationen finden Sie unter Verwenden des Unicode-Zeichenformats zum Importieren oder Exportieren von Daten. |
FORMAT
Gibt das Format der referenzierten Datei an, z. B.:
SELECT *
FROM OPENROWSET(BULK N'<data-file-path>',
FORMAT='CSV') AS cars;
Die gültigen Werte sind "CSV" (kommagetrennte Wertedatei, die mit dem RFC 4180-Standard kompatibel ist), "LAMINAT", "DELTA" (Version 1.0) und "JSONL", je nach Version:
| Version | CSV-Datei | PARKETT | DELTA | JSONL |
|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | Nein | Nein | Nein |
| SQL Server 2022 (16.x) und höhere Versionen | Yes | Yes | Yes | Nein |
| Azure SQL-Datenbank | Yes | Yes | Yes | Nein |
| Verwaltete Azure SQL-Instanz | Yes | Yes | Yes | Nein |
| Serverloser SQL-Pool in Azure Synapse Analytics | Yes | Yes | Yes | Nein |
| Microsoft Fabric Warehouse in Microsoft Fabric und SQL Analytics-Endpunkt in Microsoft Fabric | Yes | Yes | Nein | Yes |
| SQL-Datenbank in Microsoft Fabric | Yes | Yes | Nein | Nein |
Important
Die OPENROWSET Funktion kann das JSON-Format nur mit Newline-Trennzeichen lesen.
Das Zeilenumbruchzeichen muss als Trennzeichen zwischen JSON-Dokumenten verwendet werden und darf nicht in die Mitte eines JSON-Dokuments gesetzt werden.
Du musst die FORMAT Option nicht angeben, wenn die Dateiendung im Pfad mit .csv, .tsv, .parquet, .parq, .jsonl, , .ldjsonoder .ndjsonendet. Zum Beispiel weiß die OPENROWSET(BULK) Funktion, dass das Format Parquet ist, basierend auf der Erweiterung im folgenden Beispiel:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
Wenn der Dateipfad nicht mit einer dieser Erweiterungen endet, müssen Sie beispielsweise folgendes FORMATangeben:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='PARQUET'
)
FORMATFILE
Gibt den vollständigen Pfad einer Formatdatei an. SQL Server unterstützt zwei Typen von Formatdateien: XML- und Nicht-XML-Formatdateien.
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'D:\XChange\test-csv.csv',
FORMATFILE= 'D:\XChange\test-format-file.xml'
)
Du brauchst eine Formatdatei, um Spaltentypen im Ergebnisset zu definieren. Die einzige Ausnahme ist, wenn Sie , SINGLE_BLOB, oder SINGLE_NCLOBangebenSINGLE_CLOB; in diesem Fall benötigen Sie keine Formatdatei.
Für weitere Informationen zum Formatieren von Dateien siehe Verwenden Sie eine Formatdatei zum Massenimport von Daten (SQL Server).
Ab SQL Server 2017 (14.x) kann es format_file_path in Azure Blob Storage sein. Beispiele finden Sie unter Beispiele für den Massenzugriff auf Daten in Azure Blob Storage.
FORMATFILE_DATA_SOURCE
FORMATFILE_DATA_SOURCE definiert den Stammspeicherort des Formatdateipfads. Mit dieser Datenquelle können Sie relative Pfade in der FORMATFILE Option verwenden.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '//pandemicdatalake/public/curated')
GO
SELECT *
FROM OPENROWSET(
BULK '//pandemicdatalake/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
FORMATFILE = 'covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt',
FORMATFILE_DATA_SOURCE = 'root'
);
Erstelle das Datei-Daten-Format mit CREATE EXTERNAL DATA SOURCE. Zusätzlich zum Root-Standort kann es eine benutzerdefinierte Zugangsberechtigung definieren, um auf die Dateien an diesem Speicherort zuzugreifen.
Text/CSV-Optionen
ROWTERMINATOR
Gibt den Zeilenterminator an, der für Char - und Widechar-Datendateien verwendet werden soll, z. B.:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWTERMINATOR = '\n'
);
Standardmäßig wird \r\n (Neue-Zeile-Zeichen) als Zeilenabschlusszeichen verwendet. Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenbeschlusszeichen.
FIELDTERMINATOR
Gibt den Feldterminator an, der für Char - und Widechar-Datendateien verwendet werden soll, z. B.:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDTERMINATOR = '\t'
);
Der Standard-Feldterminator ist , (Komma). Weitere Informationen finden Sie unter Angeben von Feld- und Zeilenterminatoren. So lesen Sie z. B. tabtrennte Daten aus einer Datei:
FIELDQUOTE
Ab SQL Server 2017 (14.x) gibt dieses Argument ein Zeichen an, das wie im folgenden Beispiel in New York als Anführungszeichen in der CSV-Datei verwendet wird:
Empire State Building,40.748817,-73.985428,"20 W 34th St, New York, NY 10118","\icons\sol.png"
Statue of Liberty,40.689247,-74.044502,"Liberty Island, New York, NY 10004","\icons\sol.png"
Es kann nur ein einzelnes Zeichen als Wert für diese Option angegeben werden. Wenn nicht angegeben, wird das Anführungszeichen (") als Anführungszeichen verwendet, wie im RFC 4180-Standard definiert. Das FIELDTERMINATOR Zeichen (z. B. ein Komma) kann in die Feldvorführungszeichen gesetzt werden, und es wird als normales Zeichen in der Zelle angesehen, die mit den FIELDQUOTE Zeichen umschlossen ist.
Verwenden Sie FIELDQUOTE = '"'z. B. zum Lesen des vorherigen CSV-Datasets in New York . Die Werte des Adressfelds werden als einzelner Wert beibehalten, nicht durch die Kommas innerhalb der " (Anführungszeichen) in mehrere Werte aufgeteilt.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDQUOTE = '"'
);
PARSER_VERSION
Gilt für: Nur Fabric Data Warehouse
Gibt die beim Lesen von Dateien zu verwendende Parserversion an. Derzeit unterstützte CSV Parserversionen sind 1.0 und 2.0:
- PARSER_VERSION = '1,0'
- PARSER_VERSION = '2,0'
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='CSV',
PARSER_VERSION = '2.0'
)
CSV-Parser-Version 2.0 ist die Standardimplementierung, die auf Leistung optimiert ist, unterstützt jedoch nicht alle Altoptionen und Codierungen, die in Version 1.0 verfügbar sind. Bei Verwendung von OPENROWSET fällt das Fabric Data Warehouse automatisch auf Version 1.0 zurück, wenn man die Optionen nur in dieser Version verwendet, selbst wenn die Version nicht explizit angegeben ist. In manchen Fällen muss man die Version 1.0 explizit angeben, um Fehler zu beheben, die durch nicht unterstützte Funktionen verursacht werden, die vom Parser Version 2.0 gemeldet werden.
Einzelheiten zu CSV-Parserversion 1.0:
- Die folgenden Optionen werden nicht unterstützt: HEADER_ROW.
- Standardterminatoren sind
\r\n\nund\r. - Wenn Sie (Zeilenumbruch) als Zeilenendpunkt angeben
\n, wird es automatisch einem\rZeichen (Wagenrücklauf) vorangestellt, das zu einem Zeilenendpunkt führt\r\n.
Einzelheiten zu CSV-Parserversion 2.0:
- Nicht alle Datentypen werden unterstützt.
- Die maximal zulässige Zeichenlänge für Spalten beträgt 8.000.
- Die maximale Zeilengröße beträgt 8 MB.
- Folgende Optionen werden nicht unterstützt:
DATA_COMPRESSION. - Eine leere Zeichenfolge in Anführungszeichen ("") wird als leere Zeichenfolge interpretiert.
- DATEFORMAT SET Die Option wird nicht anerkannt.
- Unterstütztes Format für datumsdatentyp :
YYYY-MM-DD - Unterstütztes Format für den Zeitdatentyp :
HH:MM:SS[.fractional seconds] - Unterstütztes Format für datetime2-Datentyp :
YYYY-MM-DD HH:MM:SS[.fractional seconds] - Standardterminatoren sind
\r\nund\n.
ESCAPE_CHAR
Gibt das Zeichen in der Datei an, das verwendet wird, um sich selbst und alle Trennzeichenwerte in der Datei zu escapen, z. B.:
Place,Address,Icon
Empire State Building,20 W 34th St\, New York\, NY 10118,\\icons\\sol.png
Statue of Liberty,Liberty Island\, New York\, NY 10004,\\icons\\sol.png
Wenn auf das Escapezeichen ein Wert folgt, bei dem es sich nicht um das Escapezeichen selbst oder um einen der Trennzeichenwerte handelt, wird das Escapezeichen beim Lesen des Werts gelöscht.
Der ESCAPECHAR Parameter wird unabhängig davon angewendet, ob der FIELDQUOTE Parameter aktiviert ist oder nicht aktiviert ist. Er fungiert nicht als Escapezeichen für das Zitierzeichen. Das Anführungszeichen muss mit einem weiteren Anführungszeichen als Escapezeichen versehen werden. Das Anzeichen kann nur innerhalb des Spaltenwerts angezeigt werden, wenn der Wert mit an zitierten Zeichen gekapselt ist.
Im folgenden Beispiel werden Kommas (,) und umgekehrter Schrägstrich (\) als Escapezeichen und dargestellt als\,:\\
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ESCAPECHAR = '\'
);
HEADER_ROW
Gibt an, ob eine CSV-Datei Kopfzeilen enthält, die nicht mit anderen Datenzeilen zurückgegeben werden sollen. Ein Beispiel für eine CSV-Datei mit einer Kopfzeile wird im folgenden Beispiel gezeigt:
Place,Latitude,Longitude,Address,Area,State,Zipcode
Empire State Building,40.748817,-73.985428,20 W 34th St,New York,NY,10118
Statue of Liberty,40.689247,-74.044502,Liberty Island,New York,NY,10004
Der Standardwert ist FALSE. Unterstützt im PARSER_VERSION='2.0' In-Fabric Data Warehouse. Wenn TRUEdie Spaltennamen gemäß Argument aus der ersten Zeile FIRSTROW gelesen werden. Wenn TRUE und Schema mithilfe WITHangegeben wird, erfolgt die Bindung von Spaltennamen durch Spaltennamen, nicht durch Ordnungspositionen.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
HEADER_ROW = TRUE
);
Optionen für die Fehlerbehandlung
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.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<error-file-path>'
);
Die Fehlerdatei wird zu Beginn der Ausführung des Befehls erstellt. Wenn die Datei bereits vorhanden ist, wird ein Fehler ausgelöst. Zusätzlich wird eine Kontrolldatei erstellt, die die Erweiterung .ERROR.txt enthält. Diese Datei enthält einen Verweis auf jede Zeile in der Fehlerdatei und stellt eine Fehlerdiagnose bereit. Nachdem die Fehler behoben wurden, können die Daten geladen werden.
Ab SQL Server 2017 (14.x) kann sich error_file_path in Azure Blob Storage befinden.
ERRORFILE_DATA_SOURCE
Ab SQL Server 2017 (14.x) ist dieses Argument eine benannte externe Datenquelle, die auf den Speicherort der Fehlerdatei zeigt, die fehler enthält, die während des Imports gefunden wurden.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<root-error-file-path>')
GO
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<relative-error-file-path>',
ERRORFILE_DATA_SOURCE = 'root'
);
Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL).
MAXERRORS
Gibt die maximale Anzahl von Syntaxfehlern oder nichtkonformierenden Zeilen an, wie in der Formatdatei definiert, die auftreten kann, bevor OPENROWSET eine Ausnahme ausgelöst wird. Bis MAXERRORS sie erreicht ist, OPENROWSET ignoriert jede ungültige Zeile, lädt sie nicht, und zählt die ungültige Zeile als einen Fehler.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
MAXERRORS = 0
);
Der Standardwert für maximum_errors ist 10.
Note
MAX_ERRORS gilt nicht für CHECK Einschränkungen oder für die Konvertierung von Geld - und Bigint-Datentypen .
Datenverarbeitungsoptionen
ERSTE REIHE
Gibt die Nummer der ersten zu ladenden Zeile an. Der Standardwert ist 1. Dieser Wert gibt die erste Zeile in der angegebenen Datendatei an. Die Zeilennummern werden durch Zählen der Zeilenabschlusszeichen bestimmt.
FIRSTROW basiert auf 1.
LASTROW
Gibt die Nummer der letzten zu ladenden Zeile an. Der Standardwert ist 0. Dieser Wert gibt die letzte Zeile in der angegebenen Datendatei an.
ROWS_PER_BATCH
Gibt die ungefähre Anzahl von Datenzeilen in der Datendatei an. Dieser Wert ist eine Schätzung und sollte eine Annäherung (innerhalb einer Größenordnung) der tatsächlichen Anzahl von Zeilen sein. Standardmäßig wird ROWS_PER_BATCH basierend auf dateimerkmalen (Anzahl der Dateien, Dateigrößen, Größe der zurückgegebenen Datentypen) geschätzt. Die Angabe ROWS_PER_BATCH = 0 ist identisch mit dem Weglassen ROWS_PER_BATCH. Beispiel:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWS_PER_BATCH = 100000
);
ORDER ( { Spalte [ ASC | DESC ] } [ ,... n ] [ EINDEUTIG ] )
Ein optionaler Hinweis, der angibt, wie die Daten in der Datendatei sortiert sind. Standardmäßig geht der Massenvorgang davon aus, dass die Datendatei nicht sortiert ist. Die Leistung kann verbessert werden, wenn der Abfrageoptimierer die Reihenfolge ausnutzen kann, um einen effizienteren Abfrageplan zu generieren. Die folgende Liste enthält Beispiele für die Angabe einer Sortierung, die von Vorteil sein kann:
- Einfügen von Zeilen in eine Tabelle mit einem gruppierten Index, in der die Rowsetdaten nach dem Schlüssel des gruppierten Index sortiert sind.
- Verknüpfen des Rowsets mit einer anderen Tabelle, in der die Sortierungs- und Joinspalten übereinstimmen.
- Aggregieren der Rowsetdaten nach den Sortierspalten.
- Verwenden des Rowsets als Quelltabelle in der
FROMKlausel einer Abfrage, wobei die Sortier- und Verknüpfungsspalten übereinstimmen.
UNIQUE
Gibt an, dass die Datendatei keine doppelten Einträge enthält.
Wenn die tatsächlichen Zeilen in der Datendatei nicht nach der von dir angegebenen Reihenfolge sortiert sind oder wenn du angibst, dass Hinweis UNIQUE und doppelte Schlüssel vorhanden sind, wird ein Fehler zurückgegeben.
Spaltenaliase sind erforderlich, wenn du ORDER. Die Spaltenaliasliste muss auf die abgeleitete Tabelle verweisen, auf die die Klausel BULK zugriff. Die Spaltennamen, die Sie in der Klausel angeben, ORDER beziehen sich auf diese Spaltenaliasliste. Man kann keine großen Werttypen (varchar(max),nvarchar(max),varbinary(max) und xml) und große Objekttypen (LOB) (Text, ntext und Bild) angeben.
Inhaltsoptionen
SINGLE_BLOB
Gibt den Inhalt data_file als einspaltiges Zeilenzeilen-Rowset vom Typ varbinary(max)zurück.
Important
Importiere XML-Daten nur mit der SINGLE_BLOB Option und SINGLE_CLOBSINGLE_NCLOB, da nur SINGLE_BLOB alle Windows-Codierungskonvertierungen unterstützt werden.
SINGLE_CLOB
Liest data_file als ASCII und gibt den Inhalt als einzeilige, einspaltige Zeilenmenge vom Typ varchar(max) zurück, wobei die Sortierung der aktuellen Datenbank verwendet wird.
SINGLE_NCLOB
Liest data_file als Unicode und gibt den Inhalt als einzeilige, einspaltige Zeilenmenge vom Typ nvarchar(max) zurück, wobei die Sortierung der aktuellen Datenbank verwendet wird.
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
WITH-Schema
Das WITH Schema gibt die Spalten an, die das Resultset der OPENROWSET-Funktion definieren. Sie enthält Spaltendefinitionen für jede Spalte, die OPENROWSET die Abbildungsregeln zurückgibt und umreißt, die die zugrundeliegenden Dateispalten an die Spalten im Ergebnisset binden.
Im folgenden Beispiel:
- Die Spalte
country_regionhat den Typ varchar(50) und bezieht sich auf die zugrundeliegende Spalte mit demselben Namen. - Die Spalte
datebezieht sich auf eine CSV- oder Parquet-Spalte oder JSONL-Eigenschaft mit einem anderen physischen Namen. - Die Spalte
casesverweist auf die dritte Spalte in der Datei. - Die Spalte
fatal_casesverweist auf eine verschachtelte Parquet-Eigenschaft oder JSONL-Unterobjekt.
SELECT *
FROM OPENROWSET(<...>)
WITH (
country_region varchar(50), --> country_region column has varchar(50) type and referencing the underlying column with the same name
[date] DATE '$.updated', --> date is referencing a CSV/Parquet column or JSONL property with a different physical name
cases INT 3, --> cases is referencing third column in the file
fatal_cases INT '$.statistics.deaths' --> fatal_cases is referencing a nested Parquet property or JSONL sub-object
);
<Column_name>
Der Name der Spalte, die OPENROWSET im Ergebnis-Zeilensatz zurückgegeben wird.
OPENROWSET liest Daten für diese Spalte aus der zugrundeliegenden Dateispalte mit demselben Namen, es sei denn, Sie überschreiben sie mit <column_path> oder <column_ordinal>. Der Spaltenname muss den Regeln für Spaltennamen-Identifikatoren folgen.
<column_type>
Der T-SQL-Typ der Spalte im Resultset.
OPENROWSET wandelt Werte aus der zugrundeliegenden Datei in diesen Typ um, wenn die Ergebnisse zurückgegeben werden. Weitere Informationen finden Sie unter Datentypen in Fabric Warehouse.
<column_path>
Ein punkttrennter Pfad (z. B. $.description.location.lat), der verwendet wird, um geschachtelte Felder in komplexen Typen wie Parkett zu referenzieren.
<column_ordinal>
Eine Zahl, die den physikalischen Index der Spalte repräsentiert, die auf die Spalte in der Klausel WITH abgebildet ist.
Permissions
Um mit externen Datenquellen zu arbeiten OPENROWSET , benötigen Sie folgende Berechtigungen:
-
ADMINISTER DATABASE BULK OPERATIONSoder ADMINISTER BULK OPERATIONS
Im folgenden T-SQL-Beispiel wird ein Prinzipal gewährt ADMINISTER DATABASE BULK OPERATIONS .
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];
Wenn das Zielspeicherkonto privat ist, müssen Sie dem Hauptverantwortlichen auf Container- oder Speicherkontoebene auch die Mitgliedschaft in der Rolle Storage Blob Data Reader (oder höher) zuweisen.
Remarks
Eine
FROMKlausel, die du mitSELECTverwendest, kann statt eines Tabellennamens mit vollerSELECTFunktionalität aufrufenOPENROWSET(BULK...).OPENROWSETmit derBULK-Option erfordert in derFROM-Klausel einen abhängigen Namen (wird auch als Bereichsvariable oder Alias bezeichnet). Wenn Sie das nicht hinzufügen,AS <table_alias>erhalten Sie die Fehlermeldung 491: "Ein Korrelationsname muss für den Bulk-Zeilensatz in der from-Klausel angegeben werden."Du kannst Spaltenaliase angeben. Wenn du keine Spalten-Alias-Liste angibst, muss die Formatdatei Spaltennamen haben. Die Angabe von Spaltenaliasen überschreibt die Spaltennamen in der Formatdatei. Beispiel:
FROM OPENROWSET(BULK...) AS table_aliasFROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
Eine
SELECT...FROM OPENROWSET(BULK...)-Anweisung fragt Daten in einer Datei direkt ab, ohne dass die Daten in eine Tabelle importiert werden.Eine Anweisung kann Bulk-Spaltenaliase auflisten, indem sie
SELECT...FROM OPENROWSET(BULK...)eine Formatdatei verwendet, um Spaltennamen und Datentypen anzugeben.
- Indem Sie sie als Quelltabelle in einer
INSERTOr-AnweisungMERGEverwendenOPENROWSET(BULK...), importieren Sie Daten aus einer Datendatei in Massen in eine Tabelle. Weitere Informationen finden Sie unter Verwenden BULK INSERT oder OPENROWSET(BULK...), um Daten in SQL Server zu importieren. - Wenn du die
OPENROWSET BULKOption mit einerINSERTAnweisung verwendest, unterstützt die KlauselBULKTabellenhinweise. Zusätzlich zu den regulären Tabellenhinweisen wieTABLOCK, kann dieBULK-Klausel die folgenden spezialisierten Tabellenhinweise akzeptieren:IGNORE_CONSTRAINTS(ignoriert nur dieCHECK- andFOREIGN KEY-Einschränkungen),IGNORE_TRIGGERS,KEEPDEFAULTSundKEEPIDENTITY. Weitere Informationen finden Sie unter Tabellenhinweise (Transact-SQL). - Informationen zur Verwendung von
INSERT...SELECT * FROM OPENROWSET(BULK...)-Anweisungen finden Sie unter Massenimport und -export von Daten (SQL Server). Für Informationen darüber, wann Zeilen-Einfügungsoperationen, die durch den Massenimport durchgeführt werden, im Transaktionsprotokoll protokolliert werden, siehe Voraussetzungen für minimale Protokollierung beim Massenimport. - Wenn du
OPENROWSET (BULK ...)Daten mit dem vollständigen Wiederherstellungsmodell importierst, optimiert das Logging nicht.
Note
Bei Verwendung OPENROWSETist es wichtig zu verstehen, wie SQL Server den Identitätswechsel behandelt. Für Informationen zu Sicherheitsaspekten siehe Use BULK INSERT or OPENROWSET(BULK...) zum Importieren von Daten in den SQL Server.
In Microsoft Fabric Data Warehouse fasst die folgende Tabelle die unterstützten Funktionen zusammen:
| Feature | Supported | Nicht verfügbar |
|---|---|---|
| Dateiformate | Parkett, CSV, JSONL | Delta, Azure Cosmos DB, JSON, relationale Datenbanken |
| Authentication | Entra ID/SPN Passthrough, öffentlicher Speicher | SAS/SAK, SPN, Verwalteter Zugriff |
| Storage | Azure Blob Storage, Azure Data Lake Storage, OneLake in Microsoft Fabric | |
| Options | Nur vollständiger/absoluter URI in OPENROWSET |
Relativer URI-Pfad in OPENROWSET, DATA_SOURCE |
| Partitioning | Sie können die filepath()-Funktion in einer Abfrage verwenden. |
Massenimport von SQLCHAR-, SQLNCHAR- oder SQLBINARY-Daten
OPENROWSET(BULK...) nimmt an, dass, wenn man nicht anders angibt, die maximale Länge von SQLCHAR, SQLNCHAR, oder SQLBINARY Daten nicht 8.000 Bytes überschreitet. Wenn Sie Daten in ein LOB-Datenfeld importieren, das beliebige Objekte von varchar(max),nvarchar(max) oder varbinary(max) enthält, die 8.000 Bytes überschreiten, müssen Sie eine XML-Datei verwenden, die die maximale Länge für das Datenfeld definiert. Um die maximale Länge anzugeben, bearbeite die Formatdatei und deklariere das MAX_LENGTH Attribut.
Note
Eine automatisch generierte Formatdatei gibt nicht die Länge oder maximale Länge für ein LOB-Feld an. Sie können eine Formatdatei jedoch bearbeiten und die Länge oder maximale Länge manuell angeben.
Massenexport und -import von SQLXML-Dokumenten
Verwenden Sie in der Formatdatei einen der folgenden Datentypen für den Massenexport oder -import von SQLXML-Daten.
| Datentyp | Effect |
|---|---|
SQLCHAR oder SQLVARYCHAR |
Die Daten werden auf der Clientcodeseite oder auf der Codeseite gesendet, die durch die Sortierung impliziert wird. |
SQLNCHAR oder SQLNVARCHAR |
Die Daten werden im Unicode-Format gesendet. |
SQLBINARY oder SQLVARYBIN |
Die Daten werden ohne Konvertierung gesendet. |
Datei-Metadatenfunktionen
Manchmal musst du wissen, welche Datei- oder Ordnerquelle mit einer bestimmten Zeile im Ergebnisset korreliert.
Du kannst Funktionen filepath verwenden, um filename Dateinamen und den Pfad im Ergebnisset zurückzugeben. Oder du kannst sie nutzen, um Daten basierend auf Dateinamen und Ordnerpfad zu filtern. In den folgenden Abschnitten finden Sie kurze Beschreibungen zusammen mit Proben.
Dateinamenfunktion
Diese Funktion gibt den Dateinamen für die Zeile zurück.
Der Rückgabe-Datentyp ist nvarchar(1024). Für optimale Leistung wird das Ergebnis der Dateinamenfunktion immer auf einen passenden Datentyp gecastet. Wenn du einen Zeichendatentyp verwendest, stelle sicher, dass du eine passende Länge verwendest.
Das folgende Beispiel liest die NYC Yellow Taxi-Datendateien für die letzten drei Monate des Jahres 2017 und gibt die Anzahl der Fahrten pro Datei zurück. Der OPENROWSET Teil der Abfrage gibt an, welche Dateien gelesen werden sollen.
SELECT
nyc.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=2017/month=9/*.parquet',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT='PARQUET'
) nyc
GROUP BY nyc.filename();
Das folgende Beispiel zeigt, wie man in der WHERE Klausel die filename() Dateien zum Lesen filtern kann. Es greift auf den gesamten Ordner im OPENROWSET Teil der Abfrage auf und filtert Dateien in der WHERE Klausel.
Deine Ergebnisse sind dieselben wie im vorherigen Beispiel.
SELECT
r.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2)
WITH (C1 varchar(200) ) AS [r]
WHERE
r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
r.filename()
ORDER BY
[filename];
Dateipfadfunktion
Diese Funktion gibt einen vollständigen Pfad oder einen Teil eines Pfades zurück:
- Wenn du die
filepathFunktion ohne Parameter aufrufst, gibt sie den vollständigen Dateipfad zurück, von dem eine Zeile stammt. - Wenn Sie die
filepathFunktion mit einem Parameter aufrufen, gibt sie den Teil des Pfades zurück, der mit dem Joker an der im Parameter angegebenen Position übereinstimmt. Zum Beispiel gibt ein Parameterwert von 1 den Teil des Pfades zurück, der mit der ersten Wildcard übereinstimmt.
Der Rückgabedatentyp der filepath Funktion ist nvarchar(1024). Für optimale Leistung wird das Ergebnis der filepath Funktion immer auf den entsprechenden Datentyp gecastet. Wenn du einen Zeichendatentyp verwendest, stelle sicher, dass du eine passende Länge verwendest.
Das folgende Beispiel enthält die NYC Yellow Taxi-Datendateien für die letzten drei Monate des Jahres 2017. Es gibt die Anzahl der Ritten pro Dateipfad zurück. Der OPENROWSET Teil der Abfrage gibt an, welche Dateien gelesen werden sollen.
SELECT
r.filepath() AS filepath
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
Das folgende Beispiel zeigt, wie man in der WHERE Klausel die filepath() Dateien zum Lesen filtern kann.
Du kannst Wildcards im OPENROWSET Teil der Abfrage verwenden und die Dateien in der WHERE Klausel filtern. Ihre Ergebnisse werden dieselben sein wie im vorherigen Beispiel.
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_*-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Examples
Dieser Abschnitt enthält allgemeine Beispiele zur Veranschaulichen der Verwendung von OPENROWSET BULK Syntax.
A. Verwenden Sie OPENROWSET, um BULK INSERT Daten in einer varbinary(max)-Spalte abzulegen.
Gilt für: Nur SQL Server.
Im folgenden Beispiel wird eine kleine Tabelle für Demonstrationszwecke erstellt und Dateidaten aus einer Datei Text1.txt eingefügt, die C: sich im Stammverzeichnis befindet, in eine varbinary(max) -Spalte.
CREATE TABLE myTable (
FileName NVARCHAR(60),
FileType NVARCHAR(60),
Document VARBINARY(MAX)
);
GO
INSERT INTO myTable (
FileName,
FileType,
Document
)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
*
FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_BLOB
) AS Document;
GO
B. Verwenden des OPENROWSET BULK-Anbieters mit einer Formatdatei zum Abrufen von Zeilen aus einer Textdatei
Gilt für: Nur SQL Server.
Im folgenden Beispiel werden mithilfe einer Formatdatei Zeilen aus der durch Tabstopps getrennten Textdatei values.txt abgerufen, die die folgenden Daten enthält:
1 Data Item 1
2 Data Item 2
3 Data Item 3
Die Formatdatei values.fmt beschreibt die Spalten in values.txt:
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
Diese Abfrage ruft diese Daten ab:
SELECT a.* FROM OPENROWSET(
BULK 'C:\test\values.txt',
FORMATFILE = 'C:\test\values.fmt'
) AS a;
C. Angeben einer Formatdatei und codepage
Gilt für: Nur SQL Server.
Im folgenden Beispiel wird gezeigt, wie Sie sowohl die Optionen für die Formatdatei als auch die Codeseiten gleichzeitig verwenden.
INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
BULK N'D:\data.csv',
FORMATFILE = 'D:\format_no_collation.txt',
CODEPAGE = '65001'
) AS a;
D. Zugreifen auf Daten aus einer CSV-Datei mit einer Formatdatei
Gilt für: Nur SQL Server 2017 (14.x) und höhere Versionen.
SELECT * FROM OPENROWSET(
BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW = 2,
FORMAT = 'CSV'
) AS cars;
E. Zugreifen auf Daten aus einer CSV-Datei ohne Formatdatei
Gilt für: Nur SQL Server.
SELECT * FROM OPENROWSET(
BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14\MSSQL\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'SELECT * FROM E:\Tlog\TerritoryData.csv'
);
Important
Der ODBC-Treiber sollte eine 64-Bit-Treiber sein. Öffnen Sie die Registerkarte "Treiber " der Anwendung "Herstellen einer Verbindung mit einer ODBC-Datenquelle (SQL Server-Import- und Export-Assistent)" in Windows, um dies zu überprüfen. Es gibt 32-Bit Microsoft Text Driver (*.txt, *.csv) , das mit einer 64-Bit-Version nicht sqlservr.exefunktioniert.
F. Zugreifen auf Daten aus einer Datei, die in Azure Blob Storage gespeichert ist
Gilt für: Nur SQL Server 2017 (14.x) und höhere Versionen.
In SQL Server 2017 (14.x) und höheren Versionen verwendet das folgende Beispiel eine externe Datenquelle, die auf einen Container in einem Azure-Speicherkonto und auf eine datenbankbezogene Anmeldeinformationen verweist, die für eine freigegebene Zugriffssignatur erstellt wurden.
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoices',
SINGLE_CLOB
) AS DataFile;
Vollständige OPENROWSET Beispiele, einschließlich der Konfiguration der Anmeldeinformationen und der externen Datenquelle, finden Sie unter Beispiele für den Massenzugriff auf Daten in Azure Blob Storage.
G. Importieren in eine Tabelle aus einer Datei, die in Azure Blob Storage gespeichert ist
Das folgende Beispiel zeigt, wie man den OPENROWSET Befehl verwendet, um Daten aus einer CSV-Datei in einem Azure Blob-Speicherort zu laden, an dem der SAS-Schlüssel erstellt wurde. Sie konfigurieren den Azure Blob-Speicherstandort als externe Datenquelle. Dieser Prozess erfordert eine datenbankbezogene Zugangsdaten, die eine Shared-Access-Signatur (SAS) verwendet, die durch einen Masterschlüssel in der Benutzerdatenbank verschlüsselt wird.
-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
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***************';
-- Make sure that you don't have a leading ? in the 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/curriculum',
-- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
CREDENTIAL = MyAzureBlobStorageCredential
);
INSERT INTO achievements
WITH (TABLOCK) (
id,
description
)
SELECT * FROM OPENROWSET(
BULK 'csv/achievements.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FORMATFILE = 'csv/achievements-c.xml',
FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;
H. Verwenden einer verwalteten Identität für eine externe Quelle
Gilt für: Verwaltete Azure SQL-Instanz und Azure SQL-Datenbank
Das folgende Beispiel erstellt eine Zugangsdaten mit einer verwalteten Identität, erstellt eine externe Quelle und lädt dann Daten aus einer CSV, die auf der externen Quelle gehostet wird.
Erstellen Sie zuerst die Anmeldeinformation, und geben Sie den Blobspeicher als externe Quelle an:
CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';
CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
CREDENTIAL = sampletestcred
);
Laden Sie als Nächstes Daten aus der CSV-Datei, die im Blobspeicher gehostet wird:
SELECT * FROM OPENROWSET(
BULK 'Test - Copy.csv',
DATA_SOURCE = 'SampleSource',
SINGLE_CLOB
) as test;
I. Verwenden von OPENROWSET für den Zugriff auf mehrere Parkettdateien mit S3-kompatiblem Objektspeicher
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
Das folgende Beispiel greift von verschiedenen Orten auf mehrere Parquet-Dateien zu, die alle auf S3-kompatiblen Objektspeicher gespeichert sind:
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO
CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
LOCATION = 's3://10.199.40.235:9000/movies',
CREDENTIAL = s3_dsc
);
GO
SELECT * FROM OPENROWSET(
BULK (
'/decades/1950s/*.parquet',
'/decades/1960s/*.parquet',
'/decades/1970s/*.parquet'
),
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_eds'
) AS data;
J. Verwenden von OPENROWSET für den Zugriff auf mehrere Delta-Tabellen aus Azure Data Lake Gen2
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
In diesem Beispiel heißt der Datentabellencontainer Contoso und befindet sich auf einem Azure Data Lake Gen2-Speicherkonto.
CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';
CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = delta_storage_dsc
);
SELECT *
FROM OPENROWSET(
BULK '/Contoso',
FORMAT = 'DELTA',
DATA_SOURCE = 'Delta_ED'
) AS result;
K. Verwenden von OPENROWSET zum Abfragen von öffentlich-anonymen Datasets
Im folgenden Beispiel wird das öffentlich verfügbare gelbe NYC-Taxireisedatensatz verwendet.
Erstellen Sie zuerst die Datenquelle:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Fragen Sie alle Dateien mit .parquet der Erweiterung in Ordnern ab, die mit dem Namensmuster übereinstimmen:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
A. Lesen einer Parkettdatei aus Azure Blob Storage
Im folgenden Beispiel können Sie sehen, wie Sie 100 Zeilen aus einer Parkettdatei lesen:
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
B. Lesen einer benutzerdefinierten CSV-Datei
Im folgenden Beispiel sehen Sie, wie man Zeilen aus einer CSV-Datei mit einer Header-Zeile und explizit angegebenen Terminatorzeichen liest, die Zeilen und Felder trennen:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
HEADER_ROW = TRUE,
ROW_TERMINATOR = '\n',
FIELD_TERMINATOR = ',');
C. Angeben des Dateispaltenschemas beim Lesen einer Datei
Im folgenden Beispiel spezifizieren Sie das Schema der Zeile, die die OPENROWSET Funktion zurückgibt:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet')
WITH (
updated DATE
,confirmed INT
,deaths INT
,iso2 VARCHAR(8000)
,iso3 VARCHAR(8000)
);
D. Partitionierte Datensätze lesen
Im folgenden Beispiel verwendet man die filepath() Funktion, um die Teile der URI aus dem abgestimmten Dateipfad auszulesen:
SELECT TOP 10
files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://<storage account>.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';
E. Angeben des Dateispaltenschemas beim Lesen einer JSONL-Datei
Im folgenden Beispiel können Sie sehen, wie Sie das Schema der Zeile explizit angeben, das als Ergebnis der OPENROWSET Funktion zurückgegeben wird:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.dfs.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl')
WITH (
country_region varchar(50),
date DATE '$.updated',
cases INT '$.confirmed',
fatal_cases INT '$.deaths'
);
Wenn ein Spaltenname nicht mit dem physischen Namen einer Spalte in den Eigenschaften übereinstimmt, wenn die JSONL-Datei vorhanden ist, können Sie den physischen Namen im JSON-Pfad nach der Typdefinition angeben. Sie können mehrere Eigenschaften verwenden. Um z $.location.latitude . B. auf die geschachtelten Eigenschaften in Komplexen Typen von Parkett oder JSON-Unterobjekten zu verweisen.
Weitere Beispiele
A. Verwenden Sie OPENROWSET, um eine CSV-Datei aus einem Fabric Lakehouse auszulesen
In diesem Beispiel liest OPENROWSET du eine CSV-Datei auf einem Fabric Lakehouse. Die Datei ist benannt customer.csv und wird im Ordner Files/Contoso/ gespeichert. Da du keine Datenquelle oder datenbankbezogene Zugangsdaten angibst, verwendet die Fabric-SQL-Datenbank deinen Entra ID-Kontext zur Authentifizierung.
SELECT * FROM OPENROWSET
( BULK ' abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/customer.csv'
, FORMAT = 'CSV'
, FIRST_ROW = 2
) WITH
(
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR(50),
Gender NVARCHAR(10),
Title NVARCHAR(10),
GivenName NVARCHAR(100),
MiddleInitial VARCHAR(2),
Surname NVARCHAR(100),
StreetAddress NVARCHAR(200),
City NVARCHAR(100),
State NVARCHAR(100),
StateFull NVARCHAR(100),
ZipCode NVARCHAR(20),
Country_Region NCHAR(2),
CountryFull NVARCHAR(100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR(100),
Company NVARCHAR(100),
Vehicle NVARCHAR(100),
Latitude DECIMAL(10,6),
Longitude DECIMAL(10,6) ) AS DATA
B. Verwenden Sie OPENROWSET, um eine Datei aus einem Fabric Lakehouse zu lesen und Daten in eine neue Tabelle einzufügen
In diesem Beispiel liest OPENROWSET du Daten aus einer Parquet-Datei namens store.parquet. Dann fügen INSERT Sie die Daten in eine neue Tabelle namens Storehinzu. Die Parquet-Akte befindet sich in einem Fabric Lakehouse. Da Sie keine Datenquelle oder datenbankbezogene Anmeldedaten bereitstellen, verwendet die SQL-Datenbank in Fabric Ihren Entra ID-Kontext zur Authentifizierung.
SELECT *
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS dataset;
-- insert into new table
SELECT *
INTO Store
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS STORE;
Weitere Beispiele
Weitere Beispiele für die Verwendung OPENROWSET(BULK...)finden Sie in den folgenden Artikeln:
- Massenimport und -export von Daten (SQL Server)
- Beispiele für den Massenimport und -export von XML-Dokumenten (SQL Server)
- Beibehalten von Identitätswerten beim Massenimport von Daten (SQL Server)
- Beibehalten von NULL-Werten oder Standardwerten während des Massenimports (SQL Server)
- Massenimport von Daten mithilfe einer Formatdatei (SQL Server)
- Verwenden des Zeichenformats zum Importieren oder Exportieren von Daten (SQL Server)
- Überspringen einer Tabellenspalte mithilfe einer Formatdatei (SQL Server)
- Auslassen eines Datenfelds mithilfe einer Formatdatei (SQL Server)
- Verwenden einer Formatdatei zum Zuordnen von Tabellenspalten zu Datendateifeldern (SQL Server)
- Abfragen von Datenquellen mit OPENROWSET in Azure SQL verwaltete Instanz s
- Angeben von Feld- und Zeilenendzeichen (SQL Server)