Поставщик OLE DB для собственного клиента SQL Server

Поставщик OLE DB для собственного клиента Microsoft SQL Server предоставляет интерфейс OLE DB для баз данных Microsoft SQL Server. С помощью поставщика OLE DB для собственного клиента SQL Server распределенные запросы SQL Server могут обращаться к данным на удаленных экземплярах SQL Server.

Создание связанного сервера для доступа к базе данных SQL Server

  • Чтобы создать связанный сервер, выполните хранимую процедуру sp_addlinkedserver, указав сетевое имя сервера, на котором работает удаленный экземпляр SQL Server, в качестве аргумента data_source. Для связанных серверов SQL Server указывать поставщик (SQLNCLI) необязательно. (При использовании SQLNCLI SQL Server выполнит перенаправление к последней версии поставщика OLE DB для собственного клиента SQL Server.)

    Например, чтобы создать связанный сервер с именем LinkSQLSrvr, который функционирует с экземпляром SQL Server, работающим на сервере с сетевым именем NetSQLSrvr, следует выполнить следующее:

    sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr'
    sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'
    

    Иначе можно определить связанный сервер SQL Server как сетевое имя, как показано в следующем примере:

    sp_addlinkedserver N'NetSQLSrvr'
    

При выполнении распределенных запросов к серверу, на котором запущен экземпляр SQL Server 2000, для SQL Server 2000 рекомендуется установить пакет обновления 4 (SP4). Если пакет обновления 4 (SP4) не установлен, необходимо запустить скрипт Instcat.sql, поставляемый с пакетом обновления 4 (SP4), чтобы обновить хранимые процедуры каталога.

Если распределенные запросы выполняются на сервере, работающем с SQL Server версии 7.0 или более поздней версии, то хранимые процедуры каталога прежней версии должны быть обновлены, чтобы обеспечить корректное выполнение распределенных запросов. Например, если на сервере работает экземпляр SQL Server 7.0, то хранимые процедуры каталога должны быть обновлены до версии SQL Server 2008, прежде чем на них можно будет ссылаться в распределенном запросе с сервера, на котором работает экземпляр SQL Server 2008.

При обновлении удаленной таблицы SQL Server локальный сервер не получит никаких результирующих наборов или сообщений, причиной которых является инициализация триггеров для данного обновления.

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

sp_addlinkedserver @server = N'LinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'ServerNetName', 
    @catalog = N'AdventureWorks2008R2'
GO
SELECT *
FROM LinkServer.AdventureWorks2008R2.dbo.Vendor

В следующем примере определены связанный сервер и удаленный сервер, которые обращаются к одному компьютеру с сетевым именем othersite. В определении связанного сервера используется то же имя, что и сетевое имя удаленного сервера; в определении удаленного сервера используется другое имя.

/* Create a linked server definition to othersite. */
EXEC sp_addlinkedserver 'othersite', N'SQL Server'

/* Create a remote server definition using a
   fictitious name. */
EXEC sp_addserver 'RPCothersite'

/* Set the fictitious name to the network name far away. */
EXEC sp_setnetname 'RPCothersite', 'othersite'

На эти имена можно ссылаться в распределенных запросах и вызовах удаленных процедур.

/* A distributed query referencing othersite. */
SELECT *
FROM othersite.Northwind.dbo.Employees
/* A remote procedure call to the same server. */
EXEC RPCothersite.master.dbo.sp_who
/* Distributed queries can be used to execute
   stored procedures on the other server. */
EXEC othersite.master.dbo.sp_who

Существуют различия в механизме сопоставления имен входа между хранимыми процедурами, выполняемыми через связанный сервер, и хранимыми процедурами, выполняемыми через удаленные серверы. Дополнительные сведения см. в разделе Связь серверов.

Особенности транзакций с распределенными запросами

Поставщик OLE DB для собственного клиента Microsoft SQL Server не поддерживает вложенные транзакции. Поэтому параметру XACT_ABORT должно быть присвоено значение ON для операций изменения данных внутри транзакции с несколькими инструкциями Transact-SQL и для операций изменения данных в распределенных секционированных представлениях.