Поделиться через


Распределенные запросы для нескольких экземпляров SQL Server

Указание экземпляра SQL Server на сервере, на котором запущено несколько экземпляров SQL Server, не требует синтаксических изменений элементов языка Transact-SQL, используемых в распределенных запросах. Экземпляры могут быть указаны в распределенных запросах одним из следующих методов:

  • Указание имени сервера с помощью синтаксиса 'server_name\instance_name' в аргументе @datasrc процедуры sp_addlinkedserver.

  • Указание 'server=server_name\instance_name' в строке соединения.

Если экземпляр не указан, распределенный запрос подключается к установленному по умолчанию на указанном сервере экземпляру SQL Server.

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

-- Define a linked server on an instance of SQL Server by using @datasrc.
sp_addlinkedserver
    @server = 'LondonPayroll1',
    @srvproduct = ' ',
    @provider = 'SQLNCLI',
    @datasrc = 'London\Payroll'

-- Define a linked server on an instance of SQL Server by using
-- server_name\instance_name in a provider string.
sp_addlinkedserver
    @server = 'LondonPayroll2',
    @srvproduct = ' ',
    @provider = 'SQLNCLI',
    @provstr = 'Server=London\Payroll'

-- Specify an instance of SQL Server in OPENDATASOURCE
-- by using a provider string.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=London\Payroll;Integrated Security=SSPI')
    .AdventureWorks2008R2.HumanResources.Employee

-- Specify an instance of SQL Server in OPENROWSET
-- by using a provider string.
SELECT a.*
FROM OPENROWSET(
     'SQLNCLI',
     'Server=London\Payroll;Trusted_Connection=yes',
      AdventureWorks2008R2.HumanResources.Employee) AS a