sp_addlinkedserver (Transact-SQL)

Применимо к: даSQL Server (все поддерживаемые версии) ДаУправляемый экземпляр SQL Azure

Создает связанный сервер. Связанные серверы позволяют выполнять распределенные разнородные запросы к источникам данных 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 имеет тип sysname и не имеет значения по умолчанию.

[ @srvproduct =] ' product_name '

Введите название продукта для источника данных OLE DB, который добавляется в качестве связанного сервера. Значение product_name имеет тип nvarchar (128) и значение по умолчанию NULL. если значение равно SQL Server, то provider_name, data_source, расположение, provider_string и каталог не должны быть указаны.

[ @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 собственного клиента. Предполагается, что поставщик OLE DB будет зарегистрирован в реестре с указанным идентификатором PROGID.

Важно!

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

[ @datasrc =] ' data_source '

Имя источника данных, как оно интерпретируется поставщиком OLE DB. Значение data_source равно nvarchar ( 4000 ). data_source передается как свойство DBPROP_INIT_DATASOURCE для инициализации поставщика OLE DB.

[ @location =] ' расположение '

Введите местонахождение базы данных, понятное поставщику OLE DB. Значение Location имеет тип nvarchar ( 4000 ) и значение по умолчанию NULL. Расположение аргумента передается как свойство DBPROP_INIT_LOCATION для инициализации поставщика OLE DB.

[ @provstr =] ' provider_string '

Строка подключения для конкретного поставщика OLE DB, указывающая уникальный источник данных. Значение provider_string имеет тип nvarchar ( 4000 ) и значение по умолчанию NULL. Аргумент provstr либо передается в IDataInitialize, либо устанавливается в качестве свойства DBPROP_INIT_PROVIDERSTRING для инициализации поставщика OLE DB.

При создании связанного сервера для SQL Server поставщика OLE DB собственного клиента экземпляр можно указать с помощью ключевого слова Server как SERVER=servername\\instancename для указания конкретного экземпляра SQL Server . ServerName — это имя компьютера, на котором SQL Server выполняется, а instanceName — имя конкретного экземпляра, SQL Server к которому будет подключен пользователь.

Примечание

Чтобы получить доступ к зеркальной базе данных, строка соединения должна содержать имя базы данных. Это имя необходимо, чтобы предоставить поставщику доступа к данным возможность пытаться отработать отказ. База данных может быть указана в параметре @ provstr или @ Catalog . Кроме того, строка соединения может содержать имя партнера по обеспечению отработки отказа.

[ @catalog =] ' каталог '

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

Значения кода возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Результирующие наборы

Нет.

Remarks

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

Удаленный источник данных OLE DB Поставщик OLE DB product_name provider_name data_source расположение provider_string catalog
SQL Server MicrosoftSQL ServerПоставщик собственного клиента OLE DB SQL Server 1 (по умолчанию)
SQL Server MicrosoftSQL ServerПоставщик собственного клиента OLE DB SQLNCLI Сетевое имя SQL Server (для экземпляра по умолчанию) Имя базы данных (необязательно)
SQL Server MicrosoftSQL ServerПоставщик собственного клиента OLE DB SQLNCLI имя сервера \ 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 См Microsoft . документацию по поставщику OLE DB для DB2. Имя каталога базы данных DB2

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

2 "Any" означает, что название продукта может быть любым.

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

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

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

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

Важно!

Azure SQL Управляемый экземпляр в настоящее время поддерживает только SQL Server, База данных SQL и другие SQL в качестве удаленных источников данных.

Важно!

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

Разрешения

sp_addlinkedserverИнструкции требуется разрешение ALTER ANY Linked Server . (Элемент SQL Server Management Studio Диалоговое окно Создание связанного сервера реализуется таким образом, что требует членства в sysadmin предопределенной роли сервера.)

Примеры

A. использование поставщика Microsoft SQL Server OLE DB

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

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

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

EXEC sp_addlinkedserver     
   @server=N'S1_instance1',   
   @srvproduct=N'',  
   @provider=N'MSOLEDBSQL',   
   @datasrc=N'S1\instance1';  

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

Важно!

Собственный клиент OLE DB для SQL Server (SQLNCLI) объявляется нерекомендуемым для новых разработок. Вместо этого используйте новый драйвер Microsoft OLE DB для SQL Server (MSOLEDBSQL), который будет обновлен с самыми последними серверными компонентами.

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 доступ и образец Northwind базы данных установлены и что Northwind база данных находится в к:\мсоффице\акцесс\самплес на том же сервере, что и экземпляр SQL Server.

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  

В. Использование поставщика OLE DB Майкрософт для ODBC с параметром data_source

В следующем примере создается связанный сервер с именем 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  

Г. использование поставщика OLE DB майкрософт для Excel электронной таблицы

чтобы создать определение связанного сервера с помощью Microsoft поставщика 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';  

Д. Доступ к текстовому файлу с помощью поставщика Microsoft OLE DB для Jet

Данный пример показывает, как создать связанный сервер для прямого доступа к текстовым файлам без соединения с ними как с таблицами MDB-файла СУБД Access. Поставщик Microsoft.Jet.OLEDB.4.0 и строка поставщика Text.

Источник данных — это полный путь к каталогу, который содержит тестовые файлы. Файл schema.ini, который описывает структуру текстовых файлов, должен находиться в том же каталоге, что и текстовые файлы. дополнительные сведения о создании schema.iniного файла см. в документации по Jet ядро СУБД.

Сначала создайте связанный сервер.

EXEC sp_addlinkedserver txtsrv, N'Jet 4.0',   
   N'Microsoft.Jet.OLEDB.4.0',  
   N'c:\data\distqry',  
   NULL,  
   N'Text';  

Настройка сопоставлений имен входа.

EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL;  

Перечислите таблицы на связанном сервере.

EXEC sp_tables_ex txtsrv;  

Запросите одну из таблиц в этом случае file1#txt , используя имя из четырех частей.

SELECT * FROM txtsrv...[file1#txt];  

Е. использование поставщик 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 Azure качестве связанного сервера для использования с распределенными запросами в облачных и локальных базах данных

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

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

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

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

сначала добавьте один База данных SQL Azure в качестве связанного сервера с помощью SQL Server Native Client.

EXEC sp_addlinkedserver  
  @server='LinkedServerName', 
  @srvproduct='',       
  @provider='sqlncli', 
  @datasrc='ServerName.database.windows.net',   
  @location='',  
  @provstr='',  
  @catalog='DatabaseName'; 

Добавьте учетные данные и параметры для этого связанного сервера.

EXEC sp_addlinkedsrvlogin  
  @rmtsrvname = 'LinkedServerName',  
  @useself = 'false',  
  @rmtuser = 'LoginName',
  @rmtpassword = 'myPassword';

EXEC sp_serveroption 'LinkedServerName', 'rpc out', true;  

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

EXEC ('CREATE TABLE SchemaName.TableName(col1 int not null CONSTRAINT PK_col1 PRIMARY KEY CLUSTERED (col1) )') at LinkedServerName;  
EXEC ('INSERT INTO SchemaName.TableName VALUES(1),(2),(3)') at LinkedServerName; 

Выполните запрос к данным, используя имена из четырех частей:

SELECT * FROM LinkedServerName.DatabaseName.SchemaName.TableName; 

З. Создание связанного сервера с Управляемым экземпляром SQL с помощью аутентификации Azure AD с использованием управляемого удостоверения

Чтобы создать связанный сервер с управляемым удостоверением аутентификации, выполните следующую инструкцию T-SQL. Метод проверки подлинности использует ActiveDirectoryMSI в @provstr параметре. При необходимости можно использовать @locallogin = NULL для разрешения всех локальных имен входа.

EXEC master.dbo.sp_addlinkedserver
@server     = N'MyLinkedServer',
@srvproduct = N'',
@provider   = N'MSOLEDBSQL',
@provstr    = N'Server=mi.35e5bd1a0e9b.database.windows.net,1433;Authentication=ActiveDirectoryMSI;';

EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'MyLinkedServer',
@useself    = N'False',
@locallogin = N'user1@domain1.com';  

если Azure SQL Управляемый экземпляр управляемое удостоверение (прежнее название — управляемое удостоверение службы) добавляется в качестве имени входа в удаленный управляемый экземпляр, проверка подлинности управляемого удостоверения возможна для связанного сервера, созданного как в предыдущем примере. Поддерживаются как назначенные системой, так и управляемые удостоверения, назначенные пользователем.

Если задано Основное удостоверение, оно будет использоваться, в противном случае будет использоваться управляемое удостоверение, назначенное системой. Если управляемое удостоверение создается повторно с тем же именем, необходимо повторно создать имя входа на удаленном экземпляре, так как новый идентификатор приложения управляемого удостоверения и идентификатор безопасности субъекта-службы Управляемый экземпляр больше не совпадают. Чтобы проверить совпадение этих двух значений, преобразуйте SID в идентификатор приложения с помощью следующего запроса.

SELECT convert(uniqueidentifier, sid) as AADApplicationID
FROM sys.server_principals
WHERE name = '<managed_instance_name>';

И. Создание связанного сервера с Управляемым экземпляром SQL с помощью сквозной аутентификации Azure AD

Чтобы создать связанный сервер с сквозной проверкой подлинности, выполните следующую инструкцию T-SQL.

EXEC master.dbo.sp_addlinkedserver
@server     = N'MyLinkedServer',
@srvproduct = N'',
@provider   = N'MSOLEDBSQL',
@datasrc    = N'Server=mi.35e5bd1a0e9b.database.windows.net,1433';

При сквозной проверке подлинности контекст безопасности локального имени входа переносится на удаленный экземпляр. для сквозной проверки подлинности требуется, чтобы участник AAD был добавлен в качестве имени входа как для локального, так и для удаленного Управляемый экземпляр Azure SQL. Оба управляемых экземпляра должны находиться в группе доверия сервера. При соблюдении требований пользователь может войти в локальный экземпляр и запросить удаленный экземпляр через объект связанного сервера.

См. также раздел