sp_addlinkedserver (Transact-SQL)

Изменения: 12 декабря 2006 г.

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

    ms190479.note(ru-ru,SQL.90).gifПримечание.
    Чтобы получить доступ к зеркальной базе данных, строка соединения должна содержать имя базы данных. Это имя необходимо, чтобы предоставить возможность поставщику доступа к данным пытаться совершить переход на другой ресурс. Участник базы данных, указанный в аргументе @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

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

 

 

 

 

 

SQL Server

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

 

SQLNCLI

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

 

 

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

SQL Server

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

 

SQLNCLI

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

 

 

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

Oracle

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

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

Поставщик данных OLE DB для DB2 (Microsoft)

Любой

DB2OLEDB

 

 

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

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

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

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

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

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

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

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

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

Разрешения

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

Примеры

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

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

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

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

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

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

В следующем примере показано создание связанного сервера с именем SEATTLE Mktg.

ms190479.note(ru-ru,SQL.90).gifПримечание.
Этот пример предполагает, что установлена база данных 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 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.

ms190479.note(ru-ru,SQL.90).gifПримечание.
Указанный источник данных ODBC должен быть определен как системный DSN на сервере до того, как будет использоваться связанный сервер.
EXEC sp_addlinkedserver 
   @server = 'SEATTLE Payroll', 
   @srvproduct = '',
   @provider = 'MSDASQL', 
   @datasrc = 'LocalServer'
GO

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

Чтобы создать определение связанного сервера с помощью поставщика Microsoft OLE DB для Jet для доступа к электронным таблицам Excel, сначала необходимо создать именованный диапазон в 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'

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

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

В следующем примере показано создание связанного сервера с именем 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;'

См. также

Справочник

Хранимые процедуры распределенных запросов (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)

Другие ресурсы

Настройка связанных серверов для делегирования
Поставщики OLE DB, проверенные в работе с SQL Server

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлено примечание в описание аргумента @provstr.