OPENQUERY (Transact-SQL)OPENQUERY (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server (начиная с версии 2008) нетБаза данных SQL Azure нетХранилище данных SQL AzureнетParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Выполняет указанный передаваемый запрос к указанному связанному серверу.Executes the specified pass-through query on the specified linked server. Этот сервер является источником данных OLE DB.This server is an OLE DB data source. Из предложения FROM запроса можно ссылаться на функцию OPENQUERY как на имя таблицы.OPENQUERY can be referenced in the FROM clause of a query as if it were a table name. На функцию OPENQUERY можно также ссылаться как на целевую таблицу инструкции INSERT, UPDATE или DELETE.OPENQUERY can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement. Это зависит от возможностей поставщика OLE DB.This is subject to the capabilities of the OLE DB provider. Запрос может возвратить несколько результирующих наборов, но функция OPENQUERY возвращает только первый.Although the query may return multiple result sets, OPENQUERY returns only the first one.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

OPENQUERY ( linked_server ,'query' )  

АргументыArguments

linked_serverlinked_server
Идентификатор, представляющий имя связанного сервера.Is an identifier representing the name of the linked server.

' query '' query '
Строка запроса, выполненного в связанном сервере.Is the query string executed in the linked server. Максимальная длина строки 8 КБ.The maximum length of the string is 8 KB.

RemarksRemarks

В качестве аргументов в функции OPENQUERY нельзя использовать переменные.OPENQUERY does not accept variables for its arguments.

Функцию OPENQUERY нельзя использовать для выполнения расширенных хранимых процедур на связанном сервере.OPENQUERY cannot be used to execute extended stored procedures on a linked server. Однако расширенную хранимую процедуру можно выполнить на связанном сервере с помощью четырехкомпонентного имени.However, an extended stored procedure can be executed on a linked server by using a four-part name. Пример:For example:

EXEC SeattleSales.master.dbo.xp_msver  

Любой вызов функции OPENDATASOURCE, OPENQUERY или OPENROWSET в предложении FROM вычисляется отдельно и независимо от любого вызова этих функций, используемого как назначение при обновлении, даже если в двух таких вызовах будут заданы идентичные аргументы.Any call to OPENDATASOURCE, OPENQUERY, or OPENROWSET in the FROM clause is evaluated separately and independently from any call to these functions used as the target of the update, even if identical arguments are supplied to the two calls. В частности, условия фильтра или соединения, применяемые к результатам одного из таких вызовов, никак не влияют на результаты другого.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

РазрешенияPermissions

Функцию OPENQUERY может выполнить любой пользователь.Any user can execute OPENQUERY. Разрешения, используемые для подключения к удаленному серверу, извлекаются из настроек, определенных для связанного сервера.The permissions that are used to connect to the remote server are obtained from the settings defined for the linked server.

ПримерыExamples

A.A. Выполнение передаваемого запроса UPDATEExecuting an UPDATE pass-through query

В следующем примере используется передаваемый запрос UPDATE к связанному серверу, созданному в примере А.The following example uses a pass-through UPDATE query against the linked server created in example A.

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

Б.B. Выполнение передаваемого запроса INSERTExecuting an INSERT pass-through query

В следующем примере используется передаваемый запрос INSERT к связанному серверу, созданному в примере А.The following example uses a pass-through INSERT query against the linked server created in example A.

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

В.C. Выполнение передаваемого запроса DELETEExecuting a DELETE pass-through query

В следующем примере используется передаваемый запрос DELETE для удаления строки, созданной в примере В.The following example uses a pass-through DELETE query to delete the row inserted in example C.

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

Г.D. Выполнение передаваемого запроса SELECTExecuting a SELECT pass-through query

В приведенном ниже примере используется передаваемый запрос SELECT для выбора строки, вставленной в примере В.The following example uses a pass-through SELECT query to select the row inserted in example C.

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

См. также:See Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL) OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Функции наборов строк (Transact-SQL) Rowset Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL) sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)