Поделиться через


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 выполнит перенаправление к последней версии поставщика 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 для собственного клиента MicrosoftSQL Server

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

 

 

 

 

 

SQL Server

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

 

SQLNCLI

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

 

 

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

SQL Server

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

 

SQLNCLI

ИмяСервера\ИмяЭкземпляра (для указанного экземпляра)

 

 

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

Oracle

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

Любой 2

MSDAORA

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

 

 

 

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

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

Любой

OraOLEDB.Oracle

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

 

 

 

Access/Jet

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

Любой

Microsoft.Jet.OLEDB.4.0

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

 

 

 

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

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

Любой

MSDASQL

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

 

 

 

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

Поставщик 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 для собственного клиента 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 
   'SEATTLESales',
   N'SQL Server'
GO

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

EXEC sp_addlinkedserver   
   @server='S1_instance1', 
   @srvproduct='',
   @provider='SQLNCLI', 
   @datasrc='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 = 'SEATTLE Mktg', 
   @provider = 'Microsoft.Jet.OLEDB.4.0', 
   @srvproduct = 'OLE DB Provider for Jet',
   @datasrc = '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 = 'SEATTLE Mktg', 
   @provider = 'Microsoft.ACE.OLEDB.12.0', 
   @srvproduct = 'OLE DB Provider for ACE',
   @datasrc = 'C:\MSOffice\Access\Samples\Northwind.accdb'
GO

Использование поставщика OLE DB для Oracle (Майкрософт)

В данном примере показано, как создать связанный сервер с именем LONDON Mktg, который использует поставщик Microsoft OLE DB для Oracle. Предполагается, что MyServer — псевдоним SQL*Net для базы данных Oracle.

EXEC sp_addlinkedserver
   @server = 'LONDON Mktg',
   @srvproduct = 'Oracle',
   @provider = 'MSDAORA',
   @datasrc = 'MyServer'
GO

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

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

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

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

EXEC sp_addlinkedserver 
   @server = 'SEATTLE Payroll', 
   @srvproduct = '',
   @provider = 'MSDASQL', 
   @datasrc = '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='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, '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]

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

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

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