OPENDATASOURCE (Transact-SQL)
Gilt für: SQL Server Azure SQL Managed Instance
Stellt Ad-hoc-Verbindungsinformationen als Teil eines vierteiligen Objektnamens ohne Verwendung eines Verbindungsservernamens bereit.
Transact-SQL-Syntaxkonventionen
Syntax
OPENDATASOURCE ( 'provider_name', 'init_string' )
Argumente
'provider_name'
Der Namen, der als PROGID des OLE DB-Anbieters für den Zugriff auf die Datenquelle registriert ist. provider_name ist vom Datentyp char und verfügt über keinen Standardwert.
Wichtig
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).
'init_string'
Die Verbindungszeichenfolge, die an die IDataInitialize-Schnittstelle des Zielanbieters übergeben wird. Die Syntax der Anbieterzeichenfolge basiert auf durch Semikolons getrennten Schlüssel-Wert-Paaren im folgenden Format: 'keyword1=value ; keyword2=value'.
Informationen zu bestimmten, vom Anbieter unterstützten Paaren aus Schlüsselwort und Wert finden Sie im MDAC SDK (Microsoft Data Access Components Software Development Kit). In dieser Dokumentation wird die grundlegende Syntax definiert. In der folgenden Tabelle werden die am häufigsten im init_string-Argument verwendeten Schlüsselwörter aufgelistet.
Schlüsselwort | OLE DB-Eigenschaft | Gültige Werte und Beschreibung |
---|---|---|
Data source | DBPROP_INIT_DATASOURCE | Name der Datenquelle, mit der eine Verbindung hergestellt werden soll. Unterschiedliche Anbieter interpretieren diesen Namen auf unterschiedliche Arten. Für den OLE DB-Anbieter von SQL Server Native Client gibt er den Servernamen an. Für den OLE DB-Anbieter von Jet gibt er den vollständigen Pfad der MDB- oder XLS-Datei an. |
Standort | DBPROP_INIT_LOCATION | Speicherort der Datenbank, mit der eine Verbindung hergestellt werden soll. |
Extended Properties | DBPROP_INIT_PROVIDERSTRING | Anbieterspezifische Verbindungszeichenfolge. |
Connect timeout | DBPROP_INIT_TIMEOUT | Timeoutwert, bei dessen Erreichen der Verbindungsversuch einen Fehler verursacht. |
Benutzer-ID | DBPROP_AUTH_USERID | Für die Verbindung zu verwendende Benutzer-ID. |
Kennwort | DBPROP_AUTH_PASSWORD | Für die Verbindung zu verwendendes Kennwort. |
Katalog | DBPROP_INIT_CATALOG | Name des Anfangs- oder Standardkatalogs beim Herstellen einer Verbindung mit der Datenquelle. |
Integrierte Sicherheit | DBPROP_AUTH_INTEGRATED | SSPI, zur Angabe der Windows-Authentifizierung |
Bemerkungen
OPENROWSET
erbt immer die Sortierung der Instanz, unabhängig von der für Spalten festgelegten Sortierung.
Mit OPENDATASOURCE
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, ermöglicht das Standardverhalten keinen Ad-hoc-Zugriff.
Die OPENDATASOURCE
-Funktion kann in der Transact-SQL-Syntax an denselben Stellen verwendet werden wie ein Verbindungsservername. Deshalb kann OPENDATASOURCE
als erster Teil eines vierteiligen Namens verwendet werden, der in einer SELECT-, INSERT-, UPDATE-, oder DELETE-Anweisung auf einen Tabellen- oder Sichtnamen bzw. in einer EXECUTE-Anweisung auf eine remote gespeicherte Prozedur verweist. Beim Ausführen von remote gespeicherten Prozeduren muss OPENDATASOURCE
auf eine andere SQL Server-Instanz verweisen. Für die Argumente von OPENDATASOURCE können keine Variablen verwendet werden.
Wie die OPENROWSET
-Funktion sollte OPENDATASOURCE
nur auf OLE DB-Datenquellen verweisen, auf die selten zugegriffen wird. Definieren Sie Verbindungsserver für Datenquellen, auf die nicht nur ein paar Mal zugegriffen wird. Weder OPENDATASOURCE noch OPENROWSET stellt die gesamte Funktionalität einer Verbindungsserverdefinition bereit, wie die Sicherheitsverwaltung und die Möglichkeit, Kataloginformationen abzufragen. Alle Verbindungsinformationen, einschließlich Kennwörtern, müssen bei jedem Aufruf von OPENDATASOURCE bereitgestellt werden.
Wichtig
Die Windows-Authentifizierung bietet deutlich mehr Sicherheit als die SQL Server-Authentifizierung. Verwenden Sie nach Möglichkeit die Windows-Authentifizierung. OPENDATASOURCE
sollte nicht mit expliziten Kennwörtern in der Verbindungszeichenfolge verwendet werden.
Die Verbindungsanforderungen für jeden Anbieter sind vergleichbar mit den Anforderungen an die Parameter, die zum Erstellen von Verbindungsservern verwendet werden. Details für viele gängige Anbieter sind im Artikel sp_addlinkedserver (Transact-SQL) aufgeführt.
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
Jeder Benutzer kann OPENDATASOURCE ausführen. Die Berechtigungen, die zum Herstellen einer Verbindung mit dem Remoteserver verwendet werden, werden anhand der Verbindungszeichenfolge bestimmt.
Beispiele
A. Verwenden von OPENDATASOURCE mit SELECT und dem SQL Server OLE DB-Treiber
Im folgenden Beispiel wird der Microsoft OLE DB-Treiber für SQL Server für den Zugriff auf die HumanResources.Department
-Tabelle in der AdventureWorks2022
-Datenbank auf dem Remoteserver Seattle1
verwendet.
Mithilfe einer SELECT
-Anweisung wird das zurückgegebene Rowset definiert. Die Anbieterzeichenfolge enthält die Schlüsselwörter Server
und Trusted_Connection
. Diese Schlüsselwörter werden vom SQL Server OLE DB-Treiber erkannt.
SELECT GroupName, Name, DepartmentID
FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2022;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department
ORDER BY GroupName, Name;
B. Verwenden von OPENDATASOURCE mit SELECT und dem SQL Server OLE DB-Anbieter
Im folgenden Beispiel wird eine Ad-hoc-Verbindung mit der Payroll
-Instanz von SQL Server auf dem Server London
erstellt und die AdventureWorks2022.HumanResources.Employee
-Tabelle abgefragt.
Hinweis
Die Verwendung von SQLNCLI bewirkt eine Umleitung von SQL Server zur neuesten Version des SQL Server Native Client OLE DB-Anbieters. Es wird vorausgesetzt, dass der OLE DB-Anbieter mit der angegebenen PROGID in der Registrierung registriert ist.
Wichtig
Der SQL Server Native Client OLE DB-Anbieter (SQLNCLI) bleibt als veraltet markiert und sollte nicht mehr für neue Bereitstellungen verwendet werden. Verwenden Sie stattdessen den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL), der mit den aktuellsten Serverfeatures aktualisiert wird.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=London\Payroll;Integrated Security=SSPI')
.AdventureWorks2022.HumanResources.Employee;
C. Verwenden des Microsoft OLE DB-Anbieters für Jet
Im folgenden Beispiel wird eine Ad-hoc-Verbindung zu einem Excel-Arbeitsblatt im Format 1997 – 2003 hergestellt.
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;