sp_addlinkedserver (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

Erstellt einen Verbindungsserver. Ein Verbindungsserver ermöglicht den Zugriff auf verteilte, heterogene Abfragen für OLE DB-Datenquellen. Nach der Erstellung eines Verbindungsservers mithilfe Sp_addlinkedserver, verteilte Abfragen für den Server ausgeführt werden können. Wenn der Verbindungsserver als Instanz von SQL Serverdefiniert wird, können remote gespeicherte Prozeduren ausgeführt werden.

Topic link icon Transact-SQL-Syntaxkonventionen

  
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]   
     [ , [ @provider= ] 'provider_name' ]  
     [ , [ @datasrc= ] 'data_source' ]   
     [ , [ @location= ] 'location' ]   
     [ , [ @provstr= ] 'provider_string' ]   
     [ , [ @catalog= ] 'catalog' ]   

[ @server= ] 'server'
Der Name des zu erstellenden Verbindungsservers. server ist vom Datentyp sysnameund hat keinen Standardwert.

[ @srvproduct= ] 'product_name'
Der Produktname der OLE DB-Datenquelle, die als Verbindungsserver hinzugefügt werden soll. Product_name ist Nvarchar (128), hat den Standardwert NULL. Wenn SQL Server, Provider_name, Data_source, Speicherort, Provider_string, und Katalog müssen nicht angegeben werden.

[ @provider= ] 'provider_name'
Der eindeutige Programmbezeichner (Programmatic Identifier, PROGID) des OLE DB-Anbieters, der dieser Datenquelle entspricht. Provider_name muss eindeutig für den angegebenen OLE DB-Anbieter auf dem aktuellen Computer installiert sein. Provider_name ist Nvarchar (128), hat den Standardwert NULL; allerdings wenn Provider_name wird weggelassen, 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'
Ist der Name der Datenquelle an, wie er vom OLE DB-Anbieter interpretiert. Data_source ist Nvarchar (4000). Data_source wird als DBPROP_INIT_DATASOURCE-Eigenschaft zum Initialisieren des OLE DB-Anbieters übergeben.

[ @location= ] 'location'
Der Speicherort der Datenbank im vom OLE DB-Anbieter unterstützten Format. Speicherort ist Nvarchar (4000), hat den Standardwert NULL. Speicherort wird als DBPROP_INIT_LOCATION-Eigenschaft zum Initialisieren des OLE DB-Anbieters übergeben.

[ @provstr= ] "Provider_string"
Die für den OLE DB-Anbieter spezifische Verbindungszeichenfolge, die eine eindeutige Datenquelle identifiziert. Provider_string ist Nvarchar (4000), hat den Standardwert NULL. Standard entweder IDataInitialize übergeben oder als DBPROP_INIT_PROVIDERSTRING-Eigenschaft festgelegt, um den OLE DB-Anbieter zu initialisieren.

Bei der Erstellung des verknüpften Servers für die SQL Server Native Client OLE DB-Anbieter kann die Instanz angegeben werden, mit dem SERVER-Schlüsselwort als SERVER =Servername\Instancename an einer bestimmten Instanz von SQL Server. Servername ist der Name des Computers, auf dem SQL Server ausgeführt wird, und Instancename ist der Name der bestimmten Instanz von SQL Server mit dem der Benutzer verbunden sein wird.

System_CAPS_ICON_note.jpg 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 angegeben werden, der @provstr oder @catalog Parameter. Optional kann in der Verbindungszeichenfolge auch ein Failoverpartnername angegeben werden.

[ @catalog= ] 'catalog'
Ist der Volltextkatalog verwendet werden, wenn der OLE DB-Anbieters eine Verbindung hergestellt wird. Katalog ist Sysname, hat den Standardwert NULL. Katalog wird als DBPROP_INIT_CATALOG-Eigenschaft zum Initialisieren des OLE DB-Anbieters übergeben. Wenn der Verbindungsserver für eine Instanz von SQL Server definiert wird, verweist catalog auf die Standarddatenbank, der der Verbindungsserver zugeordnet ist.

0 (Erfolg) oder 1 (Fehler)

Keine.

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. Diese Tabelle wird außerdem die Sp_addlinkedserver Parameterwerte für den Verbindungsserver einrichten verwendet werden soll.

OLE DB-RemotedatenquelleOLE DB-Anbieterproduct_nameprovider_namedata_sourcelocationprovider_stringcatalog
SQL ServerMicrosoft SQL Server Native Client OLE DB-AnbieterSQL Server 1 (Standard)
SQL ServerMicrosoft SQL Server Native Client OLE DB-AnbieterSQLNCLINetzwerkname von SQL Server (für Standardinstanz)Datenbankname (optional)
SQL ServerMicrosoft SQL Server Native Client OLE DB-AnbieterSQLNCLIServername\Instancename (für bestimmte Instanz)Datenbankname (optional)
Oracle, Version 8 und höherOracle-Anbieter für OLE DBAnyOraOLEDB.OracleAlias für die Oracle-Datenbank
Access/JetMicrosoft OLE DB-Anbieter für JetAnyMicrosoft.Jet.OLEDB.4.0Vollständiger Pfad der Jet-Datenbankdatei
ODBC-Datenquelle (ODBC data source)Microsoft OLE DB-Anbieter für ODBCAnyMSDASQLSystem-DSN der ODBC-Datenquelle
ODBC-Datenquelle (ODBC data source)Microsoft OLE DB-Anbieter für ODBCAnyMSDASQLODBC-Verbindungszeichenfolge
File systemMicrosoft OLE DB-Anbieter für den IndexdienstAnyMSIDXSKatalogname von Indexdienstleistung
Microsoft Excel-KalkulationstabelleMicrosoft OLE DB-Anbieter für JetAnyMicrosoft.Jet.OLEDB.4.0Vollständiger Pfad der Excel-DateiExcel 5.0
IBM DB2-DatenbankMicrosoft OLE DB-Anbieter für DB2AnyDB2OLEDBFinden Sie unter Microsoft OLE DB-Anbieter für DB2-Dokumentation.Katalogname der DB2-Datenbank

1 diese Möglichkeit der Einrichtung eines Verbindungsservers erzwingt, dass der Name des Verbindungsservers mit den Netzwerknamen der Remoteinstanz von identisch sein SQL Server. Verwendung Data_source auf dem Server angeben.

2 "Alle" gibt an, dass der Produktname beliebig ist.

Die Microsoft SQL Server Native Client OLE DB-Anbieter ist der Anbieter, die mit SQL Server Wenn kein Anbietername angegeben ist oder wenn SQL Server als Produktname angegeben ist. Selbst wenn Sie den älteren Anbieternamen, SQLOLEDB, angeben, wird er beim persistenten Speichern im Katalog in SQLNCLI geändert.

Die Data_source, Speicherort, Provider_string, und Katalog Parameter zu identifizieren die Datenbank(en) 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.

System_CAPS_ICON_important.jpg Wichtig


Bei der Erstellung eines Verbindungsservers mithilfe Sp_addlinkedserver, für alle lokalen Benutzernamen 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.

Die sp_addlinkedserver Anweisung erfordert die ALTER ANY LINKED SERVER Berechtigung. (SSMS Neuer Verbindungsserver (Dialogfeld) wird implementiert, mit denen erfordert die Mitgliedschaft in der sysadmin festen Serverrolle "".)

A. Verwenden des Microsoft SQL Server Native Client-OLE DB-Anbieters

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   
   N'SEATTLESales',  
   N'SQL Server';  
GO  

Das folgende Beispiel erstellt einen Verbindungsserver S1_instance1 auf einer Instanz von SQL Server mithilfe der SQL Server Native Client OLE DB-Anbieter.

EXEC sp_addlinkedserver     
   @server=N'S1_instance1',   
   @srvproduct=N'',  
   @provider=N'SQLNCLI',   
   @datasrc=N'S1\instance1';  

B. Verwenden des Microsoft OLE DB-Anbieters für Microsoft Access

Der Microsoft.Jet.OLEDB.4.0-Anbieter stellt eine Verbindung mit Microsoft Access-Datenbanken her, die das 2002-2003-Format verwenden. Im folgenden Beispiel wird der Verbindungsserver SEATTLE Mktg erstellt.

System_CAPS_ICON_note.jpg Hinweis


In diesem Beispiel wird vorausgesetzt, dass beide Microsoft Access und die Northwind -Datenbank installiert sind und dass die Northwind in C:\Msoffice\Access\Samples befindet.

EXEC sp_addlinkedserver   
   @server = N'SEATTLE Mktg',   
   @provider = N'Microsoft.Jet.OLEDB.4.0',   
   @srvproduct = N'OLE DB Provider for Jet',  
   @datasrc = N'C:\MSOffice\Access\Samples\Northwind.mdb';  
GO  

Der Microsoft.ACE.OLEDB.12.0-Anbieter stellt eine Verbindung mit Microsoft Access-Datenbanken her, die das 2007-Format verwenden. Im folgenden Beispiel wird der Verbindungsserver SEATTLE Mktg erstellt.

System_CAPS_ICON_note.jpg Hinweis


In diesem Beispiel wird vorausgesetzt, dass beide Microsoft Access und die Northwind -Datenbank installiert sind und dass die Northwind in C:\Msoffice\Access\Samples befindet.

EXEC sp_addlinkedserver   
   @server = N'SEATTLE Mktg',   
   @provider = N'Microsoft.ACE.OLEDB.12.0',   
   @srvproduct = N'OLE DB Provider for ACE',  
   @datasrc = N'C:\MSOffice\Access\Samples\Northwind.accdb';  
GO  

C. Verwenden des Microsoft OLE DB-Anbieters für ODBC mit dem data_source-Parameter

Das folgende Beispiel erstellt einen Verbindungsserver namens SEATTLE Payroll verwendet die Microsoft OLE DB-Anbieter für ODBC (MSDASQL) und die Data_source Parameter.

System_CAPS_ICON_note.jpg Hinweis


Der angegebene ODBC-Datenquellenname muss vor der Verwendung des Verbindungsservers auf dem Server als System-DSN definiert werden.

EXEC sp_addlinkedserver   
   @server = N'SEATTLE Payroll',   
   @srvproduct = N'',  
   @provider = N'MSDASQL',   
   @datasrc = N'LocalServer';  
GO  

D. Verwenden des Microsoft OLE DB-Anbieters für Excel-Arbeitsblätter

Zum Erstellen einer Verbindungsserverdefinition mit dem Microsoft OLE DB-Anbieter für Jet auf einem Excel-Arbeitsblatt im 1997-2003-Format, erstellen Sie zunächst einen benannten Bereich in Excel unter Angabe von Spalten und Zeilen des Excel-Arbeitsblatts auswählen. 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 einem Excel-Arbeitsblatt im Excel 2007-Format herzustellen.

EXEC sp_addlinkedserver @server = N'ExcelDataSource',   
@srvproduct=N'ExcelData', @provider=N'Microsoft.ACE.OLEDB.12.0',   
@datasrc=N'C:\DataFolder\People.xlsx',  
@provstr=N'EXCEL 12.0' ;  
  

E. Verwenden des Microsoft OLE DB-Anbieters 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 der Datei Schema.ini finden Sie in der Dokumentation zum Jet-Datenbankmodul.

--Create a linked server.  
EXEC sp_addlinkedserver txtsrv, N'Jet 4.0',   
   N'Microsoft.Jet.OLEDB.4.0',  
   N'c:\data\distqry',  
   NULL,  
   N'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];  

F. Verwenden des Microsoft OLE DB-Anbieters für DB2

Im folgenden Beispiel wird der Verbindungsserver DB2 erstellt, der Microsoft OLE DB Provider for DB2 verwendet.

EXEC sp_addlinkedserver  
   @server=N'DB2',  
   @srvproduct=N'Microsoft OLE DB Provider for DB2',  
   @catalog=N'DB2',  
   @provider=N'DB2OLEDB',  
   @provstr=N'Initial Catalog=PUBS;  
       Data Source=DB2;  
       HostCCSID=1252;  
       Network Address=XYZ;  
       Network Port=50000;  
       Package Collection=admin;  
       Default Schema=admin;';  

G. Hinzufügen einer Azure SQL-Datenbank als Verbindungsserver für verteilte Abfragen in lokalen Datenbanken und Clouddatenbanken

Sie können eine Azure SQL-Datenbank als Verbindungsserver hinzufügen und diesen dann für verteilte Abfragen verwenden, die lokale Datenbanken und Clouddatenbanken umfassen. Dies ist eine Komponente für hybride Datenbanklösungen, die sich auf lokale Unternehmensnetzwerke und die Windows Azure-Cloud erstrecken.

Das SQL Server-Produktpaket umfasst die Funktion für verteilte Abfragen. Mit dieser Funktion können Sie Abfragen schreiben, in denen Daten aus lokalen Datenquellen und Remotedatenquellen (einschließlich Daten aus Nicht-SQL Server-Datenquellen), die als Verbindungsserver definiert sind, kombiniert werden. Jede Azure SQL-Datenbank (außer der virtuellen Masterdatenbank) kann als einzelner Verbindungsserver hinzugefügt und wie jede andere Datenbank direkt in Datenbankanwendungen verwendet werden.

Die Vorteile der Verwendung einer Azure SQL-Datenbank sind: Verwaltbarkeit, hohe Verfügbarkeit, Skalierbarkeit, ein vertrautes Entwicklungsmodell sowie ein relationales Datenmodell. Auf welche Weise eine Azure SQL-Datenbank von Ihrer Datenbank in der Cloud verwendet wird, richtet sich nach den Anwendungsanforderungen. Sie können alle Daten gleichzeitig auf eine Azure SQL-Datenbank verschieben oder einige Daten stufenweise umlagern, während die übrigen Daten in der lokalen Umgebung verbleiben. Für eine derartige hybride Datenbankanwendung können Azure SQL-Datenbanken jetzt als Verbindungsserver hinzugefügt werden, während die Datenbankanwendung verteilte Abfragen ausgeben kann, um Daten aus Azure SQL-Datenbanken und lokalen Datenquellen zu kombinieren.

Das folgende einfache Beispiel veranschaulicht, wie mithilfe verteilter Abfragen eine Verbindung mit einer Azure SQL-Datenbank hergestellt wird:

------ Configure the linked server  
-- Add one Windows Azure SQL DB as Linked Server  
EXEC sp_addlinkedserver  
@server='myLinkedServer', -- here you can specify the name of the linked server  
@srvproduct='',       
@provider='sqlncli', -- using SQL Server Native Client  
@datasrc='myServer.database.windows.net',   -- add here your server name  
@location='',  
@provstr='',  
@catalog='myDatabase'  -- add here your database name as initial catalog (you cannot connect to the master database)  
-- Add credentials and options to this linked server  
EXEC sp_addlinkedsrvlogin  
@rmtsrvname = 'myLinkedServer',  
@useself = 'false',  
@rmtuser = 'myLogin',             -- add here your login on Azure DB  
@rmtpassword = 'myPassword' -- add here your password on Azure DB  
EXEC sp_serveroption 'myLinkedServer', 'rpc out', true;  
------ Now you can use the linked server to execute 4-part queries  
-- You can create a new table in the Azure DB  
exec ('CREATE TABLE t1tutut2(col1 int not null CONSTRAINT PK_col1 PRIMARY KEY CLUSTERED (col1) )') at myLinkedServer  
-- Insert data from your local SQL Server  
exec ('INSERT INTO t1tutut2 VALUES(1),(2),(3)') at myLinkedServer  
  
-- Query the data using 4-part names  
select * from myLinkedServer.myDatabase.dbo.myTable  

Verteilte Abfragen, gespeicherte Prozeduren ( Transact-SQL )
Sp_addlinkedsrvlogin ( Transact-SQL )
Sp_addserver ( Transact-SQL )
Sp_dropserver ( Transact-SQL )
Sp_serveroption ( Transact-SQL )
Sp_setnetname ( Transact-SQL )
Gespeicherte Prozeduren ( Transact-SQL )
Systemtabellen ( Transact-SQL )

Community-Beiträge

Anzeigen: