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 2016 (13.x) und höhere Versionen
OPENROWSET
ist eine Alternative zum Zugriff auf Tabellen auf einem verknüpften Server und ist eine einmalige Ad-hoc-Methode für die Verbindung und den Zugriff auf Remotedaten. Ein OPENROWSET
T-SQL-Befehl enthält alle Verbindungsinformationen, die für den Zugriff auf Remotedaten aus einer externen Datenquelle erforderlich sind.
Auf die OPENROWSET
Funktion kann in der FROM
Klausel einer Abfrage verwiesen werden, als wäre sie ein Tabellenname. Auf die OPENROWSET
Funktion kann auch als Zieltabelle eines Datenanbieters INSERT
oder UPDATE
einer DELETE
Anweisung verwiesen werden, die den Funktionen des Datenanbieters unterliegt. Obwohl die Abfrage möglicherweise mehrere Resultsets zurückgibt, gibt OPENROWSET
nur das erste Resultset zurück.
Tipp
Verwenden Sie für häufigere Verweise auf externe Datenquellen stattdessen verknüpfte Server. Weitere Informationen finden Sie unter Verbindungsserver (Datenbank-Engine).
OPENROWSET
ohne den BULK
Operator ist nur in SQL Server verfügbar. Details und Links zu ähnlichen Beispielen auf anderen Plattformen:
-
OPENROWSET
unterstützt Massenvorgänge über einen integriertenBULK
Anbieter auf vielen Datenbankmodulplattformen, einschließlich Azure und Microsoft Fabric. Weitere Informationen finden Sie unter OPENROWSET BULK (Transact-SQL). - Beispiele für Azure SQL verwaltete Instanz finden Sie unter Abfragedatenquellen mit OPENROWSET.
- Azure SQL-Datenbank unterstützt nur OPENROWSET BULK (Transact-SQL).
- 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
OPENROWSET
Funktion nicht.
Transact-SQL-Syntaxkonventionen
Syntax
OPENROWSET
Die Syntax wird verwendet, um externe Datenquellen abzufragen:
OPENROWSET
( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
, { [ catalog. ] [ schema. ] object | 'query' }
)
Argumente
"provider_name"
Eine Zeichenfolge, die den Anzeigenamen (oder PROGID
) des Datenanbieters darstellt, wie in der Registrierung angegeben.
provider_name verfügt nicht über einen Standardwert. Beispiele für Anbieternamen sind die folgenden: MSOLEDBSQL
, Microsoft.Jet.OLEDB.4.0
oder MSDASQL
.
"Datenquelle"
Eine Zeichenfolgenkonstante, die einer bestimmten Datenquelle entspricht.
Die Datenquelle ist die DBPROP_INIT_DATASOURCE
Eigenschaft, die an die IDBProperties
Schnittstelle des Anbieters übergeben werden soll, um den Anbieter zu initialisieren. In der Regel enthält diese Zeichenfolge den Namen der Datenbankdatei, den Namen eines Datenbankservers oder einen Namen, den der Anbieter zum Suchen der Datenbank oder Datenbanken versteht.
Die Datenquelle kann der Dateipfad C:\SAMPLES\Northwind.mdb'
für Microsoft.Jet.OLEDB.4.0
-Anbieter oder die Verbindungszeichenfolge Server=Seattle1;Trusted_Connection=yes;
für MSOLEDBSQL
-Anbieter sein.
"user_id"
Eine Zeichenfolgenkonstante, die den Benutzernamen an den angegebenen Datenanbieter übergeben hat.
user_id gibt den Sicherheitskontext für die Verbindung an und wird als DBPROP_AUTH_USERID
Eigenschaft übergeben, um den Anbieter zu initialisieren.
user_id kann kein Microsoft Windows-Anmeldename sein.
"Kennwort"
Eine Zeichenfolgenkonstante, die das Benutzerkennwort ist, das an den Datenanbieter übergeben werden soll.
Das Kennwort wird beim Initialisieren des Anbieters als DBPROP_AUTH_PASSWORD
Eigenschaft übergeben.
Kennwort kann kein Microsoft Windows-Kennwort sein. Zum Beispiel:
SELECT a.* FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\SAMPLES\Northwind.mdb';
'<user name>';
'<password>',
Customers
) AS a;
"provider_string"
Eine anbieterspezifische Verbindungszeichenfolge, die DBPROP_INIT_PROVIDERSTRING
als Eigenschaft übergeben wird, um den OLE DB-Anbieter zu initialisieren.
provider_string kapselt normalerweise alle zum Initialisieren des Anbieters benötigten Verbindungsinformationen.
Eine Liste der Schlüsselwörter, die der OLE DB-Anbieter von SQL Server Native Client erkennt, finden Sie unter Initialisierungs- und Autorisierungseigenschaften (Native Client OLE DB Provider).For a list of keywords that the SQL Server Native Client OLE DB provider recognizes, see Initialization and Authorization Properties (Native Client OLE DB Provider). Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Sowohl der OLE DB-Anbieter für den SQL Server Native Client (SQLNCLI oder SQLNCLI11) als auch der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für Neuentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL).
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
Department
) AS d;
[ Katalog. ] [ Schema. ] -Objekt
Hier handelt es sich um die Remotetabelle oder die Ansicht, die die Daten enthält, die OPENROWSET
lesen sollte. Dabei kann es sich um ein Objekt mit dreiteiligem Name bestehend aus den folgenden Komponenten handeln:
- catalog (optional) ist der Name des Katalogs oder der Datenbank, in der sich das angegebene Objekt befindet.
- schema (optional) ist der Name des Schemas oder des Besitzers für das angegebene Objekt.
- object ist der Objektname, der das zu verwendende Objekt eindeutig identifiziert.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
AdventureWorks2022.HumanResources.Department
) AS d;
'Abfrage'
Eine Zeichenfolgenkonstante, die an den Anbieter gesendet und ausgeführt wird. Die lokale Instanz von SQL Server verarbeitet diese Abfrage nicht, verarbeitet aber Abfrageergebnisse, die vom Anbieter zurückgegeben werden, eine Pass-Through-Abfrage. Pass-Through-Abfragen sind nützlich, wenn sie für Anbieter verwendet werden, die ihre Tabellendaten nicht über Tabellennamen verfügbar machen, sondern nur über eine Befehlssprache. Pass-Through-Abfragen werden auf dem Remoteserver unterstützt, wenn der Abfrageanbieter das Command-Objekt von OLE DB und die dafür notwendigen Schnittstellen unterstützt.
Weitere Informationen finden Sie unter SQL Server Native Client (OLE DB)-Schnittstellen.
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;
Hinweise
Mit OPENROWSET
kann nur auf Remotedaten von OLE DB-Datenquellen zugegriffen werden, wenn für den angegebenen Anbieter die Registrierungsoption DisallowAdhocAccess explizit auf 0 festgelegt wird und wenn die erweiterte Konfigurationsoption „Ad Hoc Distributed Queries“ aktiviert ist. Wenn diese Optionen nicht festgelegt sind, lässt das Standardverhalten keinen Ad-hoc-Zugriff zu.
Wenn Sie auf Remote-OLE DB-Datenquellen zugreifen, wird die Anmeldeidentität vertrauenswürdiger Verbindungen nicht automatisch vom Server delegiert, auf dem der Client mit dem server verbunden ist, der abgefragt wird. Die Authentifizierungsdelegierung muss konfiguriert sein.
Katalog- und Schemanamen sind erforderlich, wenn der Datenanbieter mehrere Kataloge und Schemas in der angegebenen Datenquelle unterstützt. Werte für catalog
und schema
können weggelassen werden, wenn der Datenanbieter sie nicht unterstützt. Wenn der Anbieter nur Schemanamen unterstützt, muss ein zweiteiliger Name des Formulars schema.object
angegeben werden. Wenn der Anbieter nur Katalognamen unterstützt, muss ein dreiteiliger Name des Formulars catalog.schema.object
angegeben werden. Weitere Informationen finden Sie unter Transact-SQL-Syntaxkonventionen.
Dreiteilige Namen sind für Pass-Through-Abfragen erforderlich, die den OLE DB-Anbieter von SQL Server Native Client verwenden.
OPENROWSET
akzeptiert keine Variablen für die zugehörigen Argumente.
Jeder Aufruf von OPENDATASOURCE
, OPENQUERY
oder OPENROWSET
in der FROM
-Klausel wird einzeln und unabhängig von anderen Aufrufen dieser Funktionen ausgewertet, die als Ziel des Updates verwendet werden, auch wenn für die beiden Aufrufe identische Argumente angegeben werden. Insbesondere haben Filter- oder Joinbedingungen, die auf das Ergebnis eines dieser Aufrufe angewendet werden, keine Auswirkungen auf die Ergebnisse des jeweils anderen.
Berechtigungen
OPENROWSET
Berechtigungen werden durch die Berechtigungen des Benutzernamens bestimmt, der an den Datenanbieter übergeben wird.
Beispiele
Dieser Abschnitt enthält allgemeine Beispiele zur Veranschaulichen der Verwendung von OPENROWSET.
Hinweis
Beispiele für die Verwendung INSERT...SELECT * FROM OPENROWSET(BULK...)
finden Sie unter OPENROWSET BULK (Transact-SQL).
Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Sowohl der OLE DB-Anbieter für den SQL Server Native Client (SQLNCLI oder SQLNCLI11) als auch der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für Neuentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL).
Ein. Verwenden von OPENROWSET mit SELECT und dem OLE DB-Anbieter für SQL Server Native Client
Im folgenden Beispiel wird der SQL Server Native Client-OLE DB-Anbieter für den Zugriff auf die HumanResources.Department
-Tabelle in der AdventureWorks2022
-Datenbank auf dem Remoteserver Seattle1
verwendet. (Wird MSOLEDBSQL
für den modernen Microsoft SQL Server OLE DB-Datenanbieter verwendet, der ersetzt wurde SQLNCLI
.) Eine SELECT
Anweisung wird verwendet, um den zurückgegebenen Zeilensatz zu definieren. Die Anbieterzeichenfolge enthält die Schlüsselwörter Server
und Trusted_Connection
. Diese Schlüsselwörter werden vom OLE DB-Anbieter von SQL Server Native Client erkannt.
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2022.HumanResources.Department
ORDER BY GroupName, Name'
) AS a;
B. Verwenden des Microsoft OLE DB-Anbieters für Jet
Im folgenden Beispiel wird mithilfe des Microsoft OLE DB-Anbieters für Jet auf die Customers
-Tabelle in der Northwind
-Datenbank von Microsoft Access zugegriffen.
Hinweis
In diesem Beispiel wird davon ausgegangen, dass Microsoft Access installiert ist. Zum Ausführen dieses Beispiels müssen Sie die Northwind
Datenbank installieren.
SELECT CustomerID, CompanyName
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',
Customers
);
C. Verwenden von OPENROWSET und einer anderen Tabelle in einer INNER JOIN
Im folgenden Beispiel werden alle Daten aus der Customers
Tabelle aus der lokalen Instanz der SQL Server-Datenbank Northwind
und aus der Tabelle aus der Orders
Microsoft Access-Datenbank Northwind
ausgewählt, die auf demselben Computer gespeichert ist.
Hinweis
In diesem Beispiel wird davon ausgegangen, dass Microsoft Access installiert ist. Zum Ausführen dieses Beispiels müssen Sie die Northwind
Datenbank installieren.
USE Northwind;
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'',
Orders) AS o
ON c.CustomerID = o.CustomerID;