sp_addlinkedserver (Transact-SQL)

Создает связанный сервер. Связанные серверы позволяют выполнять распределенные разнородные запросы к источникам данных OLE DB. После создания связанного сервера с помощью процедуры sp_addlinkedserver можно выполнять распределенные запросы на этом сервере. Если связанный сервер определен в качестве экземпляра SQL Server, на нем могут выполняться удаленные хранимые процедуры.

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Синтаксические обозначения в 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;';

Ж.Добавление среды База данных SQL Windows Azure в качестве связанного сервера для использования в распределенных запросах в базах данных, размещенных в облаке и локально

Среду База данных SQL Windows Azure можно добавить в качестве связанного сервера и использовать ее для распределенных запросов, которые выполняются как локально, так и в облаке. Это компонент для гибридных решений баз данных, которые охватывают локальные корпоративные сети и облако Windows Azure.

Коробочная версия SQL Server содержит функцию распределенных запросов, которая позволяет писать запросы к данным из локальных и удаленных источников данных (включая данные из источников данных, отличных от SQL Server), которые определены как связанные серверы. Каждую среду База данных SQL Windows Azure (кроме виртуального образца) можно добавить в качестве отдельного связанного сервера и затем использовать непосредственно в приложении базы данных как любую другую базу данных.

Среди преимуществ использования среды База данных SQL Windows Azure управляемость, высокий уровень доступности, масштабируемость, работа с привычной моделью разработки и реляционная модель данных. Требования приложения базы данных определяют, как оно будет использовать среду База данных SQL Windows Azure в облаке. Можно переместить все данные одновременно в среду База данных SQL Windows Azure либо последовательно перемещать определенные объемы данных, сохраняя оставшуюся их часть в локальной системе. Для такого гибридного приложения базы данных среду База данных SQL Windows Azure теперь можно добавлять в виде связанных серверов, а приложения баз данных могут выполнять распределенные запросы для объединения данных из среды База данных SQL Windows Azure и локальных источников данных.

Ниже приведен простой пример, поясняющий, как подключиться к среде База данных SQL Windows Azure с использованием распределенных запросов.

------ Configure the linked server
-- Add one Windows Azure SQL DB as Linked Server
EXEC sp_addlinkedserver
@server='myLinkedServer', -- here you can specify the name of the linked server
@srvproduct='',     
@provider='sqlncli', -- using SQL Server Native Client
@datasrc='myServer.database.windows.net',   -- add here your server name
@location='',
@provstr='',
@catalog='myDatabase'  -- add here your database name as initial catalog (you cannot connect to the master database)
-- Add credentials and options to this linked server
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'myLinkedServer',
@useself = 'false',
@rmtuser = 'myLogin',             -- add here your login on Azure DB
@rmtpassword = 'myPassword' -- add here your password on Azure DB
EXEC sp_serveroption 'myLinkedServer', 'rpc out', true;
------ Now you can use the linked server to execute 4-part queries
-- You can create a new table in the Azure DB
exec ('CREATE TABLE t1tutut2(col1 int not null CONSTRAINT PK_col1 PRIMARY KEY CLUSTERED (col1) )') at myLinkedServer
-- Insert data from your local SQL Server
exec ('INSERT INTO t1tutut2 VALUES(1),(2),(3)') at myLinkedServer

-- Query the data using 4-part names
select * from myLinkedServer.myDatabase.dbo.myTable

См. также

Справочник

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