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_serveroption (Transact-SQL)
Хранимая процедура sp_setnetname (Transact-SQL)