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

До тех пор пока поставщик поддерживает необходимые интерфейсы 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, db_owner или предопределенной роли базы данных db_ddladmin на связанном сервере.