sp_addlinkedserver (Transact-SQL)
Erstellt einen Verbindungsserver. Ein Verbindungsserver ermöglicht den Zugriff auf verteilte, heterogene Abfragen für OLE DB-Datenquellen. Nachdem ein Verbindungsserver mithilfe von sp_addlinkedserver erstellt wurde, können verteilte Abfragen für diesen Server ausgeführt werden. Wenn der Verbindungsserver als Instanz von SQL Server definiert wird, können remote gespeicherte Prozeduren ausgeführt werden.
Syntax
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
Argumente
[ @server= ] 'server'
Der Name des zu erstellenden Verbindungsservers. server ist vom Datentyp sysname und hat keinen Standardwert.[ @srvproduct= ] 'product_name'
Der Produktname der OLE DB-Datenquelle, die als Verbindungsserver hinzugefügt werden soll. product_name ist vom Datentyp nvarchar(128), der Standardwert ist NULL. Bei SQL Server müssen provider_name, data_source, location, provider_string und catalog nicht angegeben werden.[ @provider= ] 'provider_name'
Der eindeutige programmatische Bezeichner (PROGID, Programmatic Identifier) des OLE DB-Anbieters, der dieser Datenquelle entspricht. provider_name muss eindeutig für den angegebenen OLE DB-Anbieter sein, der auf dem aktuellen Computer installiert ist. provider_name ist vom Datentyp nvarchar(128), der Standardwert ist NULL. Wenn jedoch provider_name nicht angegeben wird, wird SQLNCLI verwendet. (Wenn Sie SQLNCLI verwenden, leitet SQL Server zur neuesten Version des OLE DB-Anbieters von SQL Server Native Client um.) Es wird vorausgesetzt, dass der OLE DB-Anbieter mit der angegebenen PROGID in der Registrierung registriert ist.[ @datasrc= ] 'data_source'
Der Name der Datenquelle, so wie er vom OLE DB-Anbieter interpretiert wird. data_source ist vom Datentyp nvarchar(4000). data_source wird als DBPROP_INIT_DATASOURCE-Eigenschaft übergeben, um den OLE DB-Anbieter zu initialisieren.[ @location= ] 'location'
Der Speicherort der Datenbank, so wie er vom OLE DB-Anbieter interpretiert wird. location ist vom Datentyp nvarchar(4000), der Standardwert ist NULL. location wird als DBPROP_INIT_LOCATION-Eigenschaft übergeben, um den OLE DB-Anbieter zu initialisieren.[ @provstr= ] 'provider_string'
Die für den OLE DB-Anbieter zu verwendende Verbindungszeichenfolge, die eine eindeutige Datenquelle kennzeichnet. provider_string ist vom Datentyp nvarchar(4000), der Standardwert ist NULL. provstr wird entweder als IDataInitialize übergeben oder als DBPROP_INIT_PROVIDERSTRING-Eigenschaft festgelegt, um den OLE DB-Anbieter zu initialisieren.Wenn der Verbindungsserver für den OLE DB-Anbieter von SQL Server Native Client erstellt wird, kann die Instanz mit dem SERVER-Schlüsselwort in der Form SERVER=servername\instancename angegeben werden, um eine bestimmte Instanz von SQL Server anzugeben. servername ist der Name des Computers, auf dem SQL Server ausgeführt wird, und instancename ist der Name der Instanz von SQL Server, zu der der Benutzer eine Verbindung herstellt.
Hinweis Der Zugriff auf eine gespiegelte Datenbank ist nur dann möglich, wenn eine Verbindungszeichenfolge den Datenbanknamen enthält. Dieser Name ist notwendig, um Failoverversuche des Datenzugriffsanbieters zu ermöglichen. Die Datenbank kann im Parameter @provstr oder @catalog angegeben werden. Optional kann in der Verbindungszeichenfolge auch ein Failoverpartnername angegeben werden. Weitere Informationen finden Sie unter Herstellen der Anfangsverbindung mit einer Datenbank-Spiegelungssitzung.
[ @catalog= ] 'catalog'
Der Katalog, der beim Herstellen einer Verbindung mit dem OLE DB-Anbieter verwendet werden soll. catalog ist vom Datentyp sysname, der Standardwert ist NULL. catalog wird als DBPROP_INIT_CATALOG-Eigenschaft übergeben, um den OLE DB-Anbieter zu initialisieren. Wenn der Verbindungsserver für eine Instanz von SQL Server definiert wird, verweist catalog auf die Standarddatenbank, der der Verbindungsserver zugeordnet ist.
Rückgabecodewerte
0 (Erfolg) oder 1 (Fehler)
Resultsets
Keine.
Hinweise
Die folgende Tabelle zeigt die Einrichtungsmöglichkeiten eines Verbindungsservers für Datenquellen, auf die über OLE DB zugegriffen werden kann. Für die Einrichtung eines Verbindungsservers für eine bestimmte Datenquelle gibt es mehrere Möglichkeiten; für die einzelnen Datenquellentypen sind möglicherweise mehrere Zeilen vorhanden. In der folgenden Tabelle werden außerdem die Parameterwerte für sp_addlinkedserver aufgeführt, die zum Einrichten des Verbindungsservers verwendet werden sollten.
OLE DB-Remotedatenquelle |
OLE DB-Anbieter |
product_name |
provider_name |
data_source |
location |
provider_string |
catalog |
---|---|---|---|---|---|---|---|
SQL Server |
OLE DB-Anbieter von MicrosoftSQL Server Native Client |
SQL Server1 (Standard) |
|
|
|
|
|
SQL Server |
OLE DB-Anbieter von MicrosoftSQL Server Native Client |
|
SQLNCLI |
Netzwerkname von SQL Server (für Standardinstanz) |
|
|
Datenbankname (optional) |
SQL Server |
OLE DB-Anbieter von MicrosoftSQL Server Native Client |
|
SQLNCLI |
servername\instancename (für bestimmte Instanz) |
|
|
Datenbankname (optional) |
Oracle |
Microsoft OLE DB-Anbieter für Oracle |
Beliebig2 |
MSDAORA |
SQL*Net-Alias für Oracle-Datenbank |
|
|
|
Oracle, Version 8 und höher |
Oracle-Anbieter für OLE DB |
Beliebig |
OraOLEDB.Oracle |
Alias für die Oracle-Datenbank |
|
|
|
Access/Jet |
Microsoft OLE DB-Anbieter für Jet |
Beliebig |
Microsoft.Jet.OLEDB.4.0 |
Vollständiger Pfad der Jet-Datenbankdatei |
|
|
|
ODBC-Datenquelle |
Microsoft OLE DB-Anbieter für ODBC |
Beliebig |
MSDASQL |
System-DSN der ODBC-Datenquelle |
|
|
|
ODBC-Datenquelle |
Microsoft OLE DB-Anbieter für ODBC |
Beliebig |
MSDASQL |
|
|
ODBC-Verbindungszeichenfolge |
|
Dateisystem |
Microsoft OLE DB-Anbieter für den Indexdienst |
Beliebig |
MSIDXS |
Katalogname von Indexdienstleistung |
|
|
|
Microsoft Excel-Kalkulationstabelle |
Microsoft OLE DB-Anbieter für Jet |
Beliebig |
Microsoft.Jet.OLEDB.4.0 |
Vollständiger Pfad der Excel-Datei |
|
Excel 5.0 |
|
IBM DB2-Datenbank |
Microsoft OLE DB-Anbieter für DB2 |
Beliebig |
DB2OLEDB |
|
|
Siehe die Dokumentation zu Microsoft OLE DB-Anbieter für DB2. |
Katalogname der DB2-Datenbank |
1 Diese Möglichkeit der Einrichtung eines Verbindungsservers erzwingt, dass der Name des Verbindungsservers mit dem Netzwerknamen der Remoteinstanz von SQL Server identisch ist. Verwenden Sie data_source, um den Server anzugeben.
2 Zeigt an, dass der Produktname beliebig ist.
Der OLE DB-Anbieter von MicrosoftSQL Server wird für SQL Server verwendet, wenn kein Anbietername angegeben ist oder wenn SQL Server als Produktname angegeben ist. Selbst wenn Sie den älteren Anbieternamen, SQLOLEDB, angeben, wird er beim Speichern im Katalog in SQLNCLI geändert.
Die Parameter data_source, location, provider_string und catalog identifizieren die Datenbank(en), auf die der Verbindungsserver verweist. Falls einer dieser Parameter den Wert NULL hat, wird die entsprechende OLE DB-Initialisierungseigenschaft nicht festgelegt.
Verwenden Sie in einer Clusterumgebung, wenn Sie Dateinamen angeben, um auf OLE DB-Datenquellen zu verweisen, den UNC-Namen (Universal Naming Convention) oder ein freigegebenes Laufwerk, um den Speicherort anzugeben.
sp_addlinkedserver kann nicht innerhalb einer benutzerdefinierten Transaktion ausgeführt werden.
Sicherheitshinweis |
---|
Wird ein Verbindungsserver mithilfe von sp_addlinkedserver erstellt, wird für alle lokalen Anmeldenamen eine standardmäßige Selbstzuordnung hinzugefügt. Für andere als SQL Server-Anbieter können mit SQL Server authentifizierte Anmeldenamen möglicherweise unter dem SQL Server-Dienstkonto auf den Anbieter zugreifen. Administratoren sollten eventuell sp_droplinkedsrvlogin <linkedserver_name>, NULL verwenden, um die globale Zuordnung zu entfernen. |
Berechtigungen
Erfordert die ALTER ANY LINKED SERVER-Berechtigung.
Beispiele
A. Verwenden des OLE DB-Anbieters von Microsoft SQL Server Native Client
Im folgenden Beispiel wird der Verbindungsserver SEATTLESales erstellt. Der Produktname lautet SQL Server, und es wird kein Anbietername verwendet.
USE master;
GO
EXEC sp_addlinkedserver
'SEATTLESales',
N'SQL Server'
GO
Im folgenden Beispiel wird der Verbindungsserver S1_instance1 für eine Instanz von SQL Server mit dem OLE DB-Anbieter von SQL Server Native Client erstellt.
EXEC sp_addlinkedserver
@server='S1_instance1',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='S1\instance1'
B. Verwenden von Microsoft OLE DB-Anbieter für Microsoft Access
Der Microsoft.Jet.OLEDB.4.0-Anbieter stellt eine Verbindung mit Microsoft Access-Datenbanken mit dem Format 2002-2003 her. Im folgenden Beispiel wird der Verbindungsserver SEATTLE Mktg erstellt.
Hinweis |
---|
In diesem Beispiel wird davon ausgegangen, dass Microsoft Access und die Northwind-Beispieldatenbank installiert sind und dass sich die Northwind-Datenbank im Verzeichnis C:\Msoffice\Access\Samples befindet. |
EXEC sp_addlinkedserver
@server = 'SEATTLE Mktg',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@srvproduct = 'OLE DB Provider for Jet',
@datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb'
GO
Der Microsoft.ACE.OLEDB.12.0-Anbieter stellt eine Verbindung mit Microsoft Access-Datenbanken mit dem Format 2007 her. Im folgenden Beispiel wird der Verbindungsserver SEATTLE Mktg erstellt.
Hinweis |
---|
In diesem Beispiel wird davon ausgegangen, dass Microsoft Access und die Northwind-Beispieldatenbank installiert sind und dass sich die Northwind-Datenbank im Verzeichnis C:\Msoffice\Access\Samples befindet. |
EXEC sp_addlinkedserver
@server = 'SEATTLE Mktg',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@srvproduct = 'OLE DB Provider for ACE',
@datasrc = 'C:\MSOffice\Access\Samples\Northwind.accdb'
GO
Verwenden von Microsoft OLE DB-Anbieter für Oracle
Im folgenden Beispiel wird der Verbindungsserver LONDON Mktg erstellt, der den Microsoft OLE DB-Anbieter für Oracle verwendet. Es wird davon ausgegangen, dass der SQL*Net-Alias für die Oracle-Datenbank MyServer lautet.
EXEC sp_addlinkedserver
@server = 'LONDON Mktg',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'MyServer'
GO
D. Verwenden von Microsoft OLE DB-Anbieter für ODBC mit dem data_source-Parameter
Im folgenden Beispiel wird der Verbindungsserver SEATTLE Payroll erstellt, der den Microsoft OLE DB-Anbieter für ODBC (MSDASQL) und den data_source-Parameter verwendet.
Hinweis |
---|
Der angegebene ODBC-Datenquellenname muss vor der Verwendung des Verbindungsservers auf dem Server als System-DSN definiert werden. |
EXEC sp_addlinkedserver
@server = 'SEATTLE Payroll',
@srvproduct = '',
@provider = 'MSDASQL',
@datasrc = 'LocalServer'
GO
E. Verwenden von Microsoft OLE DB-Anbieter für eine Microsoft Excel-Kalkulationstabelle
Um eine Verbindungsserverdefinition mit dem Microsoft OLE DB-Anbieter für Jet für den Zugriff auf eine Excel-Kalkulationstabelle im Format 1997-2003 einzurichten, erstellen Sie zunächst in Excel einen benannten Bereich, mit dem die gewünschten Spalten und Zeilen des Excel-Arbeitsblatts ausgewählt werden. Auf den Namen des Bereichs kann dann als Tabellenname in einer verteilten Abfrage verwiesen werden.
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\MyData\DistExcl.xls',
NULL,
'Excel 5.0'
GO
Um auf Daten zugreifen zu können, die sich in einer Excel-Kalkulationstabelle befinden, ordnen Sie einem Zellenbereich einen Namen zu. Die folgende Abfrage kann für den Zugriff auf den angegebenen benannten Bereich SalesData als Tabelle mithilfe des zuvor eingerichteten Verbindungsservers verwendet werden.
SELECT *
FROM ExcelSource...SalesData
GO
Wenn SQL Server unter einem Domänenkonto ausgeführt wird, das Zugriff auf eine Remotefreigabe hat, kann ein UNC-Pfad anstelle eines zugeordneten Laufwerks verwendet werden.
EXEC sp_addlinkedserver 'ExcelShare',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'\\MyServer\MyShare\Spreadsheets\DistExcl.xls',
NULL,
'Excel 5.0'
Verwenden Sie den ACE-Anbieter, um eine Verbindung mit einer Excel-Kalkulationstabelle im Format Excel 2007 herzustellen.
EXEC sp_addlinkedserver @server = N'ExcelDataSource',
@srvproduct=N'ExcelData', @provider=N'Microsoft.ACE.OLEDB.12.0',
@datasrc=N'C:\DataFolder\People.xlsx',
@provstr='EXCEL 12.0' ;
F. Verwenden von Microsoft OLE DB-Anbieter für Jet für den Zugriff auf eine Textdatei
Im folgenden Beispiel wird ein Verbindungsserver für den direkten Zugriff auf Textdateien erstellt, ohne die Dateien als Tabellen in einer MDB-Datei von Microsoft Access zu verknüpfen. Der Anbieter ist Microsoft.Jet.OLEDB.4.0, und die Anbieterzeichenfolge lautet Text.
Die Datenquelle ist der vollständige Pfad des Verzeichnisses mit den Textdateien. Eine Datei namens schema.ini, die die Struktur der Textdateien beschreibt, muss im selben Verzeichnis wie die Textdateien vorhanden sein. Weitere Informationen zum Erstellen einer Schema.ini-Datei finden Sie in der Dokumentation zum Jet-Datenbankmodul.
--Create a linked server.
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\data\distqry',
NULL,
'Text'
GO
--Set up login mappings.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
GO
--List the tables in the linked server.
EXEC sp_tables_ex txtsrv
GO
--Query one of the tables: file1#txt
--using a four-part name.
SELECT *
FROM txtsrv...[file1#txt]
G. Verwenden von Microsoft OLE DB-Anbieter für DB2
Im folgenden Beispiel wird der Verbindungsserver DB2 erstellt, der Microsoft OLE DB Provider for DB2 verwendet.
EXEC sp_addlinkedserver
@server='DB2',
@srvproduct='Microsoft OLE DB Provider for DB2',
@catalog='DB2',
@provider='DB2OLEDB',
@provstr='Initial Catalog=PUBS;
Data Source=DB2;
HostCCSID=1252;
Network Address=XYZ;
Network Port=50000;
Package Collection=admin;
Default Schema=admin;'
Siehe auch