Zugreifen auf externe Daten

Zum Zugreifen auf Daten aus einer OLE DB-Datenquelle müssen Sie SQL Server die folgenden Informationen bereitstellen:

  • Den Namen des OLE DB-Anbieters, der die Datenquelle verfügbar macht.

  • Alle Informationen, die der OLE DB-Anbieter zum Finden der Datenquelle benötigt.

  • Entweder den Namen eines Objekts, das die OLE DB-Datenquelle als Rowset bereitstellen kann, oder eine Abfrage, die an den OLE DB-Anbieter gesendet werden kann und die Datenquelle veranlasst, ein Rowset verfügbar zu machen. Objekte, die als Rowsets bereitgestellt werden können, werden Remotetabellen genannt. Abfragen, die Rowsets generieren, werden Pass-Through-Abfragen genannt.

  • Sie können SQL Server gültige Anmelde-IDs für die OLE DB-Datenquelle zur Verfügung stellen (optional).

SQL Server unterstützt das Verweisen auf heterogene OLE DB-Datenquellen direkt in Transact-SQL-Anweisungen, indem der Verbindungsservername oder der Ad-hoc-Connectorname verwendet wird.

Verbindungsservernamen

Ein Verbindungsserver ist ein virtueller Server, der mit allen für den Zugriff auf eine OLE DB-Datenquelle erforderlichen Informationen für SQL Server definiert wurde. Ein Verbindungsservername wird mithilfe der gespeicherten Systemprozedur sp_addlinkedserver definiert. Die Verbindungsserverdefinition enthält alle Informationen, die zum Finden der OLE DB-Datenquelle benötigt werden. Lokale SQL Server-Benutzernamen werden dann mithilfe von sp_addlinkedsrvlogin Benutzernamen im Verbindungsserver zugeordnet.

Auf Remotetabellen kann verwiesen werden, indem der Verbindungsservername als eines der folgenden Elemente verwendet wird:

  • Als Servername in einer Tabelle mit vierteiligem Namen oder in einem Sichtverweis in einer Transact-SQL-Anweisung. Die anderen drei Teile des Namens verweisen auf ein Objekt im Verbindungsserver, das als Rowset bereitgestellt wird.

  • Als Eingabeparameter für eine OPENQUERY-Funktion. OPENQUERY sendet einen auszuführenden Befehl an den OLE DB-Anbieter. Das zurückgegebene Rowset kann dann als Tabellen- oder Sichtverweis in einer Transact-SQL-Anweisung verwendet werden.

Weitere Informationen finden Sie unter Identifizieren einer Datenquelle mithilfe eines Verbindungsservernamens.

Ad-hoc-Namen

Ein Ad-hoc-Name wird für seltene Abfragen von OLE DB-Datenquellen verwendet, die nicht als Verbindungsserver definiert sind. In SQL Server stellen die Funktionen OPENROWSET und OPENDATASOURCE Verbindungsinformationen für den Zugriff auf Daten aus OLE DB-Datenquellen bereit.

Standardmäßig werden Ad-hoc-Namen nicht unterstützt. Die DisallowAdhocAccess-Anbieteroption muss auf 0 gesetzt sein, und die erweiterte Konfigurationsoption Ad Hoc Distributed Queries muss aktiviert sein.

SicherheitshinweisSicherheitshinweis

Das Aktivieren der Verwendung von Ad-hoc-Namen bedeutet, dass jede authentifizierte Anmeldung an SQL Server auf den Anbieter zugreifen kann. SQL Server-Administratoren sollten dieses Feature nur für hochgradig vertrauenswürdige Anbieter aktivieren, auf die von jeder lokalen Anmeldung sicher zugegriffen werden kann.

OPENROWSET und OPENDATASOURCE sollten nur für Verweise auf OLE DB-Datenquellen verwendet werden, auf die selten zugegriffen wird. Sie sollten einen Verbindungsserver für Datenquellen definieren, auf die mehr als nur wenige Male zugegriffen wird. Weder OPENDATASOURCE noch OPENROWSET stellen den gesamten Funktionsumfang von Verbindungsserverdefinitionen bereit. Dieser umfasst die Sicherheitsverwaltung und die Fähigkeit, Kataloginformationen abzufragen. Wenn eine dieser Funktionen aufgerufen wird, müssen alle Verbindungsinformationen, einschließlich der Kennwörter, bereitgestellt werden.

OPENROWSET und OPENDATASOURCE erscheinen als Funktionen und werden aus Gründen der Vereinfachung auch als Funktionen bezeichnet. Allerdings sind OPENROWSET und OPENDATASOURCE in Wirklichkeit Makros und unterstützen nicht das Bereitstellen von Transact-SQL-Variablen als Argumente.

Die OPENROWSET-Funktion kann mit allen OLE DB-Anbietern verwendet werden, die ein Rowset zurückgeben, und ist immer anwendbar, wenn ein Tabellen- oder ein Sichtverweis in einer Transact-SQL-Anweisung verwendet wird. OPENROWSET wird mit Folgendem angegeben:

  • Mit allen Informationen, die zum Herstellen einer Verbindung mit der OLE DB-Datenquelle erforderlich sind.

  • Mit dem Namen eines Objekts, das ein Rowset generiert, oder einer Abfrage, die ein Rowset generiert.

OPENDATASOURCE bietet Verbindungsinformationen als Teil eines vierteiligen Objektnamens. Diese Funktion unterstützt nur OLE DB-Anbieter, die mehrere Rowsets unter Einhaltung der Schreibweise catalog**.schema.**object verfügbar machen. OPENDATASOURCE kann an denselben Stellen in der Transact-SQL-Syntax verwendet werden wie ein Verbindungsservername. OPENDATASOURCE wird mit Folgendem angegeben:

  • Mit dem Namen, der als PROGID des OLE DB-Anbieters registriert ist, der für den Zugriff auf die Datenquelle verwendet wird.

  • Mit einer Verbindungszeichenfolge, die die verschiedenen Verbindungseigenschaften angibt, die an den OLE DB-Anbieter übergeben werden müssen. Die Syntax der Verbindungszeichenfolge ist eine Folge von Paaren aus Schlüsselwörtern und Werten. Die Basissyntax wird im Microsoft Data Access Software Development Kit definiert, und jeder Anbieter dokumentiert die von ihm unterstützen Paare aus Schlüsselwort und Wert. Weitere Informationen zu Verbindungszeichenfolgen finden Sie unter OPENDATASOURCE (Transact-SQL).

Weitere Informationen finden Sie unter Identifizieren einer Datenquelle mithilfe eines Ad-hoc-Namens.

Zugreifen auf Verbindungsserver

Nachdem ein Verbindungsserver mithilfe von sp_addlinkedserver erstellt wurde, ist der Zugriff mit folgenden Elementen möglich:

  • Verteilte Abfragen, die auf Tabellen auf dem Verbindungsserver über SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen mithilfe eines Verbindungsservernamens zugreifen.

  • Remote gespeicherte Prozeduren können mithilfe eines vierteiligen Namens für den Verbindungsserver ausgeführt werden.

  • Eine EXECUTE-Anweisung, die einen beliebigen parametrisierten Pass-Through-Befehl umfasst, indem die AT linked_server_name-Erweiterung verwendet wird. Dieser Befehl enthält Anweisungen in DLL (Data Definition Language) und DLM (Data Manipulation Language) oder Befehle, die mehrere Ergebnisse zurückgeben. Weitere Informationen finden Sie unter Verwenden von Pass-Through-Abfragen als Tabellen.

sp_addserver wird zwar als Kompatibilitätsfeature für vorhandene Anwendungen beibehalten, diese gespeicherte Prozedur wird jedoch in künftigen Versionen nicht mehr unterstützt. Wenn Anwendungen auf SQL Server 2008 portiert werden, müssen sie möglicherweise für einige Zeit mit neuem Code mithilfe von verteilten Abfragen mit einer Verbindungsserverdefinition sowie Legacycode mithilfe einer Remoteserverdefinition ausgeführt werden. Verbindungsserver und Remoteserver verwenden denselben Namespace. Entweder die Verbindungsserver- oder die Remoteserverdefinition muss somit einen Namen verwenden, der nicht mit dem Netzwerknamen des Servers, auf den remote zugegriffen wird, übereinstimmt. Definieren Sie einen der Einträge mit einem anderen Servernamen, und verwenden Sie sp_setnetname zur Zuordnung dieser Definition zum Netzwerknamen des Remoteservers.