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 конкретный экземпляр SQL Server может быть указан с помощью ключевого слова SERVER в виде SERVER=servername\instancename. Значение servername — это имя компьютера, на котором выполняется SQL Server, а instancename — имя конкретного экземпляра SQL Server, с которым будет соединен пользователь.

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

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

  • [ **@catalog=** ] 'catalog'
    Имя используемого каталога при соединении с поставщиком OLE DB. Аргумент catalog имеет тип sysname и значение по умолчанию NULL. Аргумент catalog передается как свойство DBPROP_INIT_LOCATION для инициализации поставщика 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 для собственного клиента Microsoft SQL Server

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

 

 

 

 

 

SQL Server

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

 

SQLNCLI

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

 

 

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

SQL Server

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

 

SQLNCLI

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

 

 

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

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

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

Любой

OraOLEDB.Oracle

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

 

 

 

Access/Jet

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

Любой

Microsoft.Jet.OLEDB.4.0

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

 

 

 

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

Поставщик 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

 

 

См. документацию по поставщику данных Microsoft OLE DB для DB2.

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

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

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

Поставщик OLE DB для собственного клиента Microsoft SQL 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';

Б. Использование поставщика 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 и образец базы данных Northwind, а база данных Northwind находится в каталоге «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

В. Использование поставщика данных OLE DB для ODBC (Майкрософт) вместе с аргументом data_source

В данном примере показано, как создать связанный сервер с именем 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

Г. Использование поставщика 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' ;

Д. Использование поставщика данных 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];

Е. Использование поставщика данных 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;';