OPENQUERY (Transact-SQL)

Tsql теория > OPENQUERY (Transact-SQL)
18.04.2018 16:14:59



Статья:

Выполняет указанный передаваемый запрос к указанному связанному серверу. Этот сервер является источником данных OLE DB. Из предложения FROM запроса можно ссылаться на функцию OPENQUERY как на имя таблицы. На функцию OPENQUERY можно также ссылаться как на целевую таблицу инструкции INSERT, UPDATE или DELETE. Это зависит от возможностей поставщика OLE DB. Запрос может возвратить несколько результирующих наборов, но функция OPENQUERY возвращает только первый.

Синтаксис

OPENQUERY ( linked_server ,''query'' )  

Аргументы

linked_server
Идентификатор, представляющий имя связанного сервера.

'' query ''
Строка запроса, выполненного в связанном сервере. Максимальная длина строки 8 КБ.

Remarks

В качестве аргументов в функции OPENQUERY нельзя использовать переменные.

Функцию OPENQUERY нельзя использовать для выполнения расширенных хранимых процедур на связанном сервере. Однако расширенную хранимую процедуру можно выполнить на связанном сервере с помощью четырехкомпонентного имени. Пример:

SQL
EXEC SeattleSales.master.dbo.xp_msver  

Любой вызов функции OPENDATASOURCE, OPENQUERY или OPENROWSET в предложении FROM вычисляется отдельно и независимо от любого вызова этих функций, используемого как назначение при обновлении, даже если в двух таких вызовах будут заданы идентичные аргументы. В частности, условия фильтра или соединения, применяемые к результатам одного из таких вызовов, никак не влияют на результаты другого.

Разрешения

Функцию OPENQUERY может выполнить любой пользователь. Разрешения, используемые для подключения к удаленному серверу, извлекаются из настроек, определенных для связанного сервера.

Примеры

A. Выполнение передаваемого запроса UPDATE

В следующем примере используется передаваемый запрос UPDATE к связанному серверу, созданному в примере А.

SQL
UPDATE OPENQUERY (OracleSvr, ''SELECT name FROM joe.titles WHERE id = 101'')   
SET name = ''ADifferentName'';  

Б. Выполнение передаваемого запроса INSERT

В следующем примере используется передаваемый запрос INSERT к связанному серверу, созданному в примере А.

SQL
INSERT OPENQUERY (OracleSvr, ''SELECT name FROM joe.titles'')  
VALUES (''NewTitle'');  

В. Выполнение передаваемого запроса DELETE

В следующем примере используется передаваемый запрос DELETE для удаления строки, созданной в примере В.

SQL
DELETE OPENQUERY (OracleSvr, ''SELECT name FROM joe.titles WHERE name = ''''NewTitle'''''');  

Г. Выполнение передаваемого запроса SELECT

В приведенном ниже примере используется передаваемый запрос SELECT для выбора строки, вставленной в примере В.

SQL
SELECT * FROM OPENQUERY (OracleSvr, ''SELECT name FROM joe.titles WHERE name = ''''NewTitle'''''');  

См. также: