Требования к курсорам, управляемым набором ключей, для поставщиков OLE DB

Курсоры Transact-SQL, управляемые набором ключей, могут ссылаться на удаленные таблицы только при выполнении следующих условий:

  • распределенный запрос должен соответствовать требованиям инструкций SELECT, используемых в инструкции DECLARE CURSOR, объявляющей курсор, управляемый набором ключей. Дополнительные сведения об условиях поддержки курсора, управляемого набором ключей, в языке Transact-SQL см. в разделе DECLARE CURSOR (Transact-SQL);

  • все локальные таблицы запроса должны иметь уникальный индекс. Индекс удаленной таблицы должен предоставляться в наборе строк INDEXES интерфейса IDBSchemaRowset.

Требования индекса к поставщикам OLE DB

Для точной оценки запросов SQL Server может использовать индексы таблиц, предоставляемые поставщиком OLE DB. Чтобы SQL Server мог использовать индексы, поставщик должен предоставлять интерфейсы OLE DB, позволяющие просматривать набор строк индекса, выполнять поиск в наборе строк индекса с помощью значений столбцов индекса и настраивать позицию строки в наборе строк базовой таблицы с помощью закладок, полученных из набора строк индекса.

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

SQL Server может использовать индексы поставщика OLE DB только при выполнении следующих условий:

  • поставщик должен поддерживать интерфейс IDBSchemaRowset для наборов строк схем TABLES, COLUMNS и INDEXES;

  • поставщик должен поддерживать открытие набора строк на основе индекса через интерфейс IOpenRowset с помощью указания имени индекса и имени соответствующей базовой таблицы;

  • объект индекса должен поддерживать все свои обязательные интерфейсы: IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfo и IConvertTypes;

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

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

Требования к обновляемому курсору набора ключей

Удаленная таблица может быть обновлена или удалена с помощью курсора набора ключей, определенного в распределенном запросе. Например: UPDATE | DELETE remote_table WHERE CURRENT OF cursor_name.

Ниже перечислены условия, при которых обновляемые курсоры допустимы в распределенных запросах:

  • поставщик должен соответствовать условиям выполнения обновлений и удалений в удаленной таблице Дополнительные сведения см. в разделе Требования UPDATE и DELETE для поставщиков OLE DB;

  • все операции курсора должны проводиться в явных пользовательских транзакциях или в многооператорных транзакциях с уровнем изоляции повторяющегося чтения или сериализуемости.

Поставщик должен поддерживать распределенные транзакции с помощью интерфейса ITransactionJoin.