sp_addlinkedserver (Transact-SQL)

Создает связанный сервер. Связанные серверы позволяют выполнять распределенные разнородные запросы к источникам данных OLE DB. После создания связанного сервера с помощью процедуры sp_addlinkedserver можно выполнять распределенные запросы на этом сервере. Если связанный сервер определен в качестве экземпляра SQL Server, на нем могут выполняться удаленные хранимые процедуры.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

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

Аргументы

  • [ @server= ] 'server'
    Имя создаваемого связанного сервера. Аргумент server имеет тип sysname и не имеет значения по умолчанию.

  • [ @srvproduct= ] 'product_name'
    Введите название продукта для источника данных OLE DB, который добавляется в качестве связанного сервера. Аргумент product_name имеет тип nvarchar(128) и значение по умолчанию NULL. Для SQL Server аргументы provider_name, data_source, location, provider_string и catalog не должны быть указаны.

  • [ @provider= ] 'provider_name'
    Введите уникальный программный идентификатор (PROGID) поставщика OLE DB, соответствующий этому источнику данных. Имя provider_name должно быть уникальным для указанного поставщика OLE DB на текущем компьютере. Аргумент provider_name имеет тип nvarchar(128) и значение по умолчанию NULL; однако если аргумент provider_name опущен, используется SQLNCLI. (При использовании SQLNCLI SQL Server перенаправится к новой версии SQL Server поставщика OLE DB для собственного клиента SQL Server.) Поставщик OLE DB следует зарегистрировать в реестре с указанным идентификатором PROGID.

  • [ @datasrc= ] 'data_source'
    Имя источника данных, как оно интерпретируется поставщиком OLE DB. data_source имеет тип nvarchar(4000). Значение data_source передается как свойство DBPROP_INIT_DATASOURCE для инициализации поставщика OLE DB.

  • [ @location= ] 'location'
    Введите местонахождение базы данных, понятное поставщику OLE DB. Аргумент location имеет тип nvarchar(4000) и значение по умолчанию NULL. Значение location передается как свойство DBPROP_INIT_LOCATION для инициализации поставщика OLE DB.

  • [ @provstr= ] 'provider_string'
    Строка подключения для конкретного поставщика OLE DB, указывающая уникальный источник данных. Аргумент provider_string имеет тип nvarchar(4000) и значение по умолчанию NULL. provstr передается в IDataInitialize или задается как свойство DBPROP_INIT_PROVIDERSTRING для инициализации поставщика OLE DB.

    Когда связанный сервер создается для поставщика OLE DB для собственного клиента SQL Server, указать экземпляр можно с помощью ключевого слова SERVER (SERVER=servername\instancename), чтобы указать конкретный экземпляр SQL Server. servername — это имя компьютера, на котором работает SQL Server, а instancename — имя конкретного экземпляра SQL Server, к которому будет подключен пользователь.

    ПримечаниеПримечание

    Чтобы получить доступ к зеркальной базе данных, строка соединения должна содержать имя базы данных. Это имя необходимо, чтобы предоставить поставщику доступа к данным возможность пытаться отработать отказ. База данных может быть указана в параметре @provstr или @catalog. Кроме того, строка соединения может содержать имя партнера по обеспечению отработки отказа.

  • [ @catalog= ] 'catalog'
    Каталог, который должен использоваться при подключении к поставщику OLE DB. Аргумент catalog имеет тип sysname и значение по умолчанию NULL. Значение catalog передается как свойство DBPROP_INIT_CATALOG для инициализации поставщика OLE DB. Если связанный сервер определен для экземпляра SQL Server, то каталог ссылается на базу данных по умолчанию, с которой сопоставлен связанный сервер.

Значения кодов возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Результирующие наборы

Отсутствует.

Замечания

В следующей таблице показаны способы настройки связанного сервера для источников данных, доступных через поставщик OLE DB. Связанный сервер может быть настроен несколькими способами для конкретного источника данных; для одного типа источника данных возможны несколько строк. Также в таблице показаны значения аргумента процедуры sp_addlinkedserver, используемые для настройки связанного сервера.

Удаленный источник данных OLE DB

Поставщик OLE DB

product_name

provider_name

data_source

location

provider_string

catalog

SQL Server

Поставщик OLE DB для собственного клиента MicrosoftSQL Server

SQL Server1 (по умолчанию)

 

 

 

 

 

SQL Server

Поставщик OLE DB для собственного клиента Microsoft SQL Server

 

SQLNCLI

Сетевое имя SQL Server (для экземпляра по умолчанию)

 

 

Имя базы данных (необязательно)

SQL Server

Поставщик OLE DB для собственного клиента MicrosoftSQL Server

 

SQLNCLI

servername\instancename (для конкретного экземпляра)

 

 

Имя базы данных (необязательно)

Oracle, версия 8 или более поздняя

Поставщик Oracle для OLE DB

Любой

OraOLEDB.Oracle

Псевдоним для базы данных Oracle

 

 

 

Access/Jet

Поставщик OLE DB для Jet (Майкрософт)

Любой

Microsoft.Jet.OLEDB.4.0

Полный путь к файлу базы данных Jet

 

 

 

Источник данных ODBC

Поставщик Microsoft OLE DB для ODBC

Любой

MSDASQL

Системный DSN источника данных ODBC

 

 

 

Источник данных ODBC

Поставщик Microsoft OLE DB для ODBC

Любой

MSDASQL

 

 

Строка подключения ODBC

 

Файловая система

Поставщик Microsoft OLE DB для службы индексирования

Любой

MSIDXS

Имя каталога службы индексирования

 

 

 

Электронная таблица Microsoft Excel

Поставщик Microsoft OLE DB для Jet

Любой

Microsoft.Jet.OLEDB.4.0

Полный путь к файлу Excel

 

Excel 5.0

 

База данных IBM DB2

Поставщик Microsoft OLE DB для DB2

Любой

DB2OLEDB

 

 

Документацию по DB2 см. у поставщика Microsoft OLE DB.

Имя каталога базы данных DB2

1 При таком способе настройки связанного сервера имя связанного сервера совпадает с сетевым именем удаленного экземпляра SQL Server. Используйте аргумент data_source, чтобы указать сервер.

2 «Любой» указывает, что название продукта может быть любым.

Поставщик OLE DB для собственного клиента MicrosoftSQL Server используется вместе с SQL Server в случае, если имя поставщика не указано или SQL Server определен как название продукта. Даже если указано имя предыдущего поставщика (SQLOLEDB), оно все равно будет изменено на SQLNCLI при сохранении в каталог.

Аргументы data_source, location, provider_string и catalog идентифицируют базу данных или базы данных, на которые указывает связанный сервер. Если значение одного из этих аргументов равно NULL, то соответствующее свойство инициализации поставщика OLE DB не установлено.

В кластеризованной среде при указании имен файлов для указания источников данных OLE DB используйте формат UNC или общие диски для указания расположения.

Хранимая процедура sp_addlinkedserver не может быть выполнена внутри пользовательской транзакции.

Примечание по безопасностиПримечание по безопасности

При создании связанного сервера с помощью процедуры sp_addlinkedserver для всех локальных имен входа по умолчанию добавляется сопоставление самим себе. Поставщики, отличные от SQL Server, для которых выполнена проверка подлинности SQL Server, могут получить доступ к поставщику под учетной записью службы SQL Server. Администраторам нужно рассмотреть применение процедуры sp_droplinkedsrvlogin <linkedserver_name>, NULL для удаления глобального сопоставления.

Разрешения

Необходимо разрешение ALTER ANY LINKED SERVER.

Примеры

А.Использование поставщика OLE DB для собственного клиента Microsoft SQL Server

В следующем примере показано создание связанного сервера с именем SEATTLESales. Название продукта — SQL Server, имя поставщика не используется.

USE master;
GO
EXEC sp_addlinkedserver 
   N'SEATTLESales',
   N'SQL Server';
GO

В этом примере показано, как создать связанный сервер S1_instance1 на экземпляре SQL Server с помощью поставщика OLE DB для собственного клиента SQL Server.

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

Б.Использование поставщика Microsoft OLE DB для Microsoft Access

Поставщик Microsoft.Jet.OLEDB.4.0 соединяется с базами данных Microsoft Access в формате 2002–2003. В следующем примере показано создание связанного сервера с именем SEATTLE Mktg.

ПримечаниеПримечание

В этом примере предполагается, что установлена база данных Microsoft Access и образец базы данных Northwind, а база данных Northwind находится в каталоге «C:\Msoffice\Access\Samples».

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

Поставщик Microsoft.ACE.OLEDB.12.0 соединяется с базами данных Microsoft Access в формате 2007. В следующем примере показано создание связанного сервера с именем SEATTLE Mktg.

ПримечаниеПримечание

В этом примере предполагается, что установлена база данных Microsoft Access и образец базы данных Борей, а база данных Борей находится в каталоге «C:\Msoffice\Access\Samples».

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

В.Использование поставщика Microsoft OLE DB для ODBC с аргументом источника данных

В данном примере показано, как создать связанный сервер с именем SEATTLE Payroll, который использует поставщик Microsoft OLE DB для ODBC (MSDASQL) и параметр data_source.

ПримечаниеПримечание

Указанный источник данных ODBC должен быть определен как системный DSN на сервере до того, как будет использоваться связанный сервер.

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

Г.Использование поставщика Microsoft OLE DB для электронных таблиц Excel

Чтобы создать определение связанного сервера, используя поставщик OLE DB для Jet для доступа к электронным таблицам Excel в формате 1997–2003, сначала необходимо создать именованный диапазон в Excel, указав строки и столбцы для выбора в таблице Excel. Затем на имя диапазона можно будет ссылаться в распределенном запросе как на имя таблицы.

EXEC sp_addlinkedserver 'ExcelSource',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   'c:\MyData\DistExcl.xls',
   NULL,
   'Excel 5.0';
GO

Для доступа к данным в электронной таблице Excel требуется указать имя для диапазона ячеек. Следующий запрос используется для получения доступа к указанному диапазону ячеек SalesData как к таблице с помощью предварительно настроенного связанного сервера.

SELECT *
   FROM ExcelSource...SalesData;
GO

Если SQL Server выполняется под учетной записью домена, имеющего доступ к удаленной общей папке, то вместо сопоставленного диска может использоваться путь в формате UNC.

EXEC sp_addlinkedserver 'ExcelShare',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   '\\MyServer\MyShare\Spreadsheets\DistExcl.xls',
   NULL,
   'Excel 5.0';

Чтобы подключиться к электронной таблице Excel в формате Excel 2007, используйте поставщик ACE.

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' ;

Д.Использование поставщика Microsoft OLE DB для Jet для доступа к текстовым файлам

Данный пример показывает, как создать связанный сервер для прямого доступа к текстовым файлам без соединения с ними как с таблицами MDB-файла СУБД Access. Поставщик Microsoft.Jet.OLEDB.4.0 и строка поставщика Text.

Источник данных — это полный путь к каталогу, который содержит тестовые файлы. Файл schema.ini, который описывает структуру текстовых файлов, должен находиться в том же каталоге, что и текстовые файлы. Дополнительные сведения о том, как создать файл Schema.ini, см. в документации по ядру СУБД Jet.

--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];

Е.Использование поставщика данных Microsoft OLE DB для DB2

В следующем примере показано создание связанного сервера с именем DB2, который использует Microsoft OLE DB Provider for DB2.

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;';

См. также

Справочник

Хранимые процедуры распределенных запросов (Transact-SQL)

sp_addlinkedsrvlogin (Transact-SQL)

sp_addserver (Transact-SQL)

sp_dropserver (Transact-SQL)

sp_serveroption (Transact-SQL)

Хранимая процедура sp_setnetname (Transact-SQL)

Системные хранимые процедуры (Transact-SQL)

Системные таблицы (Transact-SQL)