sp_addlinkedserver (Transact-SQL)
Создает связанный сервер. Связанные серверы позволяют выполнять распределенные разнородные запросы к источникам данных OLE DB. После создания связанного сервера с помощью процедуры sp_addlinkedserver можно выполнять распределенные запросы на этом сервере. Если связанный сервер определен в качестве экземпляра SQL Server, на нем могут выполняться удаленные хранимые процедуры.
Синтаксис
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;'
См. также