Рекомендации по использованию распределенных запросов

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

Инструкции на языке Transact-SQL

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

  • Допускаются любые запросы, содержащие стандартную форму инструкции SELECT select_list с предложением FROM и предложением WHERE. Предложение INTO new_table_name инструкции SELECT не допускается, если new_table_name ссылается на удаленную таблицу.

  • В инструкциях SELECT, INSERT, UPDATE и DELETE столбцы в удаленных таблицах не могут обозначаться одночастным или четырехчастным именем таблицы. Удаленные таблицы в предложении FROM должны обозначаться псевдонимами, и этот псевдоним следует использовать для обозначения имени столбца.

  • Таблицы, имеющие столбцы типа xml, запрашивать нельзя, даже если запрашиваются столбцы, отличные от xml.

  • Если столбец большого объекта (LOB) из удаленной таблицы указан в качестве элемента select_list в инструкции SELECT, инструкция SELECT не может содержать предложение ORDER BY.

  • Предикаты IS NULL и IS NOT NULL не могут ссылаться на столбцы LOB в удаленной таблице.

  • GROUP BY ALL не допускается в распределенном запросе, если в этом запросе также содержится предложение WHERE. GROUP BY без указания ALL поддерживается.

  • Инструкции INSERT допускаются в отношении удаленных таблиц, если поставщик соответствует требованиям OLE DB для инструкций INSERT. Дополнительные сведения см. в разделе Требования к инструкции INSERT для поставщиков OLE DB.

  • Константы NULL не могут быть вставлены в столбец timestamp через распределенный запрос.

  • $IDENTITY и $ROWGUIDCOL не поддерживаются для распределенных запросов. Явные значения не могут быть вставлены в столбцы идентификаторов в удаленных таблицах.

  • Инструкции UPDATE и DELETE допускаются в отношении удаленных таблиц, если поставщик соответствует требованиям интерфейса OLE DB для указанной таблицы. Дополнительные сведения см. в разделе Требования UPDATE и DELETE для поставщиков OLE DB.

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

  • Инструкции READTEXT, WRITETEXT и UPDATETEXT не поддерживаются в отношении удаленных таблиц.

  • В операциях обновления или вставки нельзя ссылаться на столбцы, содержащие типы данных больших объектов (такие как text, ntext или image), если поставщик обрабатывается вне SQL Server, параметр поставщика AllowInProcess имеет значение 0. Дополнительные сведения см. в разделе Настройка поставщиков OLE DB для распределенных запросов.

  • Инструкции языка определения данных (DDL), такие как CREATE, ALTER или DROP, не допускаются в отношении связанных серверов.

  • Инструкция EXECUTE может отправить транзитную команду связанному серверу с помощью ключевого слова AT. Возможность выполнения инструкции зависит от конфигурации RPC связанного сервера и от его возможности выполнения инструкции.

  • Другие операции или инструкции на уровне базы данных для связанных серверов не допускаются.

Другие рекомендации

Ниже приведены некоторые дополнительные ограничения и рекомендации.

  • Курсоры STATIC или INSENSITIVE могут ссылаться на удаленные таблицы. Курсоры KEYSET могут ссылаться на удаленные таблицы, если поставщик OLE DB соответствует определенным требованиям. Дополнительные сведения об этих требованиях см. в разделе Требования к курсорам, управляемым набором ключей, для поставщиков OLE DB. Другие типы курсоров не могут ссылаться на удаленную таблицу.

  • Хранимые процедуры поддерживаются только в отношении источников данных SQL Server.

  • Параметры соединения ANSI_NULLS и ANSI_WARNINGS должны быть выставлены на ON прежде, чем соединение сможет выполнять распределенные запросы. Дополнительные сведения см. в разделе SET ANSI_DEFAULTS (Transact-SQL).

  • Чтобы создавать наилучшие планы запросов при использовании таблицы на связанном сервере, обработчику запросов необходима статистика распределения данных на связанном сервере. У пользователей с ограниченными разрешениями на столбцы таблицы могут отсутствовать разрешения, необходимые для получения необходимых статистических данных, в связи с чем эти пользователи могут получить менее эффективные планы запросов и производительность их работы может быть снижена. Если связанный сервер является экземпляром SQL Server, чтобы получать все доступные статистические данные, пользователь должен быть владельцем таблицы или членом предопределенной роли сервера sysadmin, предопределенной роли базы данных bd_owner или bd_ddladmin на связанном сервере.