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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure (somente a Instância Gerenciada) nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Executa a consulta passagem especificada no servidor vinculado especificado.Executes the specified pass-through query on the specified linked server. Esse servidor é uma fonte de dados OLE DB.This server is an OLE DB data source. OPENQUERY pode ser referenciada na cláusula FROM de uma consulta como se fosse um nome de tabela.OPENQUERY can be referenced in the FROM clause of a query as if it were a table name. OPENQUERY também pode ser referenciada como a tabela de destino de uma instrução INSERT, UPDATE ou DELETE.OPENQUERY can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement. Isso dependerá dos recursos do provedor OLE DB.This is subject to the capabilities of the OLE DB provider. Embora a consulta possa retornar vários conjuntos de resultados, OPENQUERY retorna somente o primeiro deles.Although the query may return multiple result sets, OPENQUERY returns only the first one.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

OPENQUERY ( linked_server ,'query' )  

ArgumentosArguments

linked_serverlinked_server
É um identificador que representa o nome do servidor vinculado.Is an identifier representing the name of the linked server.

' query '' query '
É a cadeia de caracteres de consulta executada no servidor vinculado.Is the query string executed in the linked server. O comprimento máximo da cadeia de caracteres é 8 KB.The maximum length of the string is 8 KB.

RemarksRemarks

OPENQUERY não aceita variáveis para seus argumentos.OPENQUERY does not accept variables for its arguments.

OPENQUERY não pode ser usado para executar procedimentos armazenados estendidos em um servidor vinculado.OPENQUERY cannot be used to execute extended stored procedures on a linked server. Porém, um procedimento armazenado estendido pode ser executado em um servidor vinculado usando um nome de quatro partes.However, an extended stored procedure can be executed on a linked server by using a four-part name. Por exemplo:For example:

EXEC SeattleSales.master.dbo.xp_msver  

Qualquer chamada para OPENDATASOURCE, OPENQUERY ou OPENROWSET na cláusula FROM é avaliada separada e independentemente de qualquer chamada para essas funções usadas como o destino da atualização, mesmo se argumentos idênticos forem fornecidos às duas chamadas.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. Em particular, as condições de filtro ou junção aplicadas no resultado de uma dessas chamadas não têm efeito sobre os resultado da outra.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

PermissõesPermissions

Qualquer usuário pode executar OPENQUERY.Any user can execute OPENQUERY. As permissões que são usadas para conectar ao servidor remoto são obtidas das configurações definidas para o servidor vinculado.The permissions that are used to connect to the remote server are obtained from the settings defined for the linked server.

ExemplosExamples

A.A. Executando uma consulta de passagem UPDATEExecuting an UPDATE pass-through query

O exemplo a seguir usa uma consulta de passagem UPDATE no servidor vinculado criado no exemplo A.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.B. Executando uma consulta de passagem INSERTExecuting an INSERT pass-through query

O exemplo a seguir usa uma consulta de passagem INSERT no servidor vinculado criado no exemplo A.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.C. Executando um consulta de passagem DELETEExecuting a DELETE pass-through query

O exemplo a seguir usa uma consulta de passagem DELETE para excluir a linha inserida no exemplo C.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.D. Executando uma consulta de passagem SELECTExecuting a SELECT pass-through query

O exemplo a seguir usa uma consulta passagem SELECT para excluir a linha inserida no exemplo C.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''');  

Consulte TambémSee 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)
Funções de conjunto de linhas (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)