Доступ к внешним данным

Для доступа к внешним данным из источника данных OLE DB SQL Server необходимо предоставить следующие сведения.

  • Имя поставщика OLE DB, реализующего источник данных.

  • Любые сведения, необходимые поставщику OLE DB для нахождения источника данных.

  • Имя объекта, который источник данных OLE DB может представить как набор строк, или запрос, который может быть послан поставщику OLE DB, и в результате которого источник данных предоставит набор строк. Объекты, которые могут быть представлены как наборы строк, называются удаленными таблицами. Запросы, формирующие наборы строк, называются передаваемыми.

  • Кроме того, SQL Server могут быть предоставлены допустимые идентификаторы входа для источника данных OLE DB.

SQL Server поддерживает ссылки на разнородные источники данных OLE DB в инструкциях языка Transact-SQL через имена связанных серверов или нерегламентированные имена компьютеров.

Имена связанных серверов

Связанным сервером называется виртуальный сервер, определенный на SQL Server со всеми сведениями, необходимыми для доступа к источнику данных OLE DB. Имя связанного сервера определяется при помощи системной хранимой процедуры sp_addlinkedserver. Определение связанного сервера содержит все данные, необходимые для нахождения источника данных OLE DB. Локальные имена входа SQL Server ставятся в соответствие с именами входа на связанном сервере процедурой sp_addlinkedsrvlogin.

На удаленные таблицы можно ссылаться по имени связанного сервера одним из следующих способов:

  • По имени сервера в состоящей из четырех частей ссылки на имя таблицы или представления в инструкции языка Transact-SQL. Три другие части имени представляют собой ссылку на объект в связанном сервере, представляемый как набор строк.

  • С помощью входного параметра функции OPENQUERY. Функция OPENQUERY передает поставщику OLE DB команду на выполнение. После этого возвращенный набор строк может быть использован как ссылка на таблицу или представление в инструкции языка Transact-SQL.

Дополнительные сведения см. в разделе Определение источника данных по имени связанного сервера.

Нерегламентированные имена

Нерегламентированное имя используется для редких запросов к источникам данных OLE DB, не определенным как связанные серверы. В SQL Server функции OPENROWSET и OPENDATASOURCE предоставляют сведения для подключения, выполняемого с целью доступа к данным из источников данных OLE DB.

По умолчанию нерегламентированные имена не поддерживаются. Параметр поставщика DisallowAdhocAccess должен иметь значение 0, и должен быть включен дополнительный параметр конфигурации ad hoc distributed queries.

Примечание по безопасностиПримечание по безопасности

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

Функции OPENROWSET и OPENDATASOURCE должны использоваться только для ссылки на источники данных OLE DB, обращения к которым происходят нечасто. Для всех источников данных, к которым будет производиться достаточно большое количество обращений, определите связанный сервер. Ни OPENDATASOURCE, ни OPENROWSET не предоставляют всех возможностей определений связанных серверов. К ним относятся управление безопасностью и возможность запрашивать данные из каталогов. Каждый раз при вызове этих функций должна предоставляться вся информация для подключения, в том числе пароли.

OPENROWSET и OPENDATASOURCE представляются как функции, и для удобства обращение к ним выполняется как к функциям, однако OPENROWSET и OPENDATASOURCE являются макрокомандами и не поддерживают предоставление переменных языка Transact-SQL в качестве аргументов.

Функция OPENROWSET может использоваться с любым поставщиком OLE DB, возвращающим набор строк, и может применяться везде, где в инструкции языка Transact-SQL используется ссылка на таблицу или представление. Для функции OPENROWSET задаются следующие данные.

  • Все сведения, необходимые для подключения к источнику данных OLE DB.

  • Имя объекта или запрос, которые должны формировать набор строк.

Функция OPENDATASOURCE предоставляет данные для подключения как часть состоящего из четырех частей имени объекта. Эта функция поддерживает только поставщиков OLE DB, предоставляющих несколько наборов строк при помощи нотации каталог**.схема.**объект. Функция OPENDATASOURCE может использоваться в синтаксисе языка Transact-SQL в том же контексте, где может использоваться имя связанного сервера. Для функции OPENROWSET задаются следующие данные:

  • Зарегистрированное как PROGID имя поставщика OLE DB, используемое для доступа к источнику данных.

  • Строка соединения, задающая различные свойства соединения, передаваемые поставщику OLE DB. Синтаксис строки соединения представляет собой последовательность пар «ключевое слово-значение». Основной синтаксис определяется в наборе средств разработки Microsoft Data Access Software Development Kit, а также в документации каждого поставщика для определенных пар «ключевое слово-значение», которые поддерживает этот поставщик. Дополнительные сведения о строках соединения см. в разделе OPENDATASOURCE (Transact-SQL).

Дополнительные сведения см. в разделе Идентификация источника данных по нерегламентированному имени.

Доступ к связанным серверам

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

  • Через распределенные запросы, обращающиеся к таблицам на связанном сервере при помощи инструкций SELECT, INSERT, UPDATE и DELETE с именем, относящимся к такому серверу.

  • Через удаленные хранимые процедуры, выполняющие обращения к связанному серверу по имени, состоящему из четырех частей.

  • Через инструкцию EXECUTE, реализуемую произвольной параметризованной передаваемой командой при помощи расширения AT linked_server_name. Эта команда включает в себя инструкции языка определения данных (DDL) и языка обработки данных (DML) или команды, возвращающие несколько результатов. Дополнительные сведения см. в разделе Использование передаваемых запросов в качестве таблиц.

Процедура sp_addserver сохраняется в целях совместимости с существующими приложениями, но в будущих выпусках эта хранимая процедура поддерживаться не будет. Так как приложения подключаются к SQL Server 2008, они должны выполняться в течение определенного времени с некоторым новым кодом, использующим распределенные запросы к определению связанного сервера, и с некоторым старым кодом, который использует определение удаленного сервера. Как связанный сервер, так и удаленный сервер используют одно и то же пространство имен. Поэтому или определение связанного сервера, или определение удаленного сервера должно использовать имя, отличающееся от сетевого имени сервера, к которому осуществляется удаленный доступ. Чтобы связать это определение с сетевым именем удаленного сервера, определите одну из записей с другим именем сервера и используйте процедуру sp_setnetname.