Partilhar via


OPENQUERY (Transact-SQL)

Aplica-se a: SQL ServerAzure SQL Managed Instance

Executa a consulta pass-through especificada no servidor ligado especificado. Este servidor é uma fonte de dados OLE DB. O OPENQUERY pode ser referenciado na cláusula FROM de uma consulta como se fosse um nome de tabela. O OPENQUERY também pode ser referenciado como tabela alvo de uma instrução INSERT, UPDATE ou DELETE. Isto está sujeito às capacidades do fornecedor OLE DB. Embora a consulta possa devolver múltiplos conjuntos de resultados, o OPENQUERY devolve apenas o primeiro.

Convenções sintáticas Transact-SQL

Sintaxe

OPENQUERY ( linked_server ,'query' )  

Argumentos

linked_server
É um identificador que representa o nome do servidor ligado.

'consulta'
É a cadeia de consulta executada no servidor ligado. O comprimento máximo da corda é de 8 KB.

Observações

O OPENQUERY não aceita variáveis para os seus argumentos.

O OPENQUERY não pode ser usado para executar procedimentos armazenados estendidos num servidor ligado. No entanto, um procedimento armazenado alargado pode ser executado num servidor ligado usando um nome de quatro partes. Por exemplo:

EXEC SeattleSales.master.dbo.xp_msver  

Qualquer chamada para OPENDATASOURCE, OPENQUERY ou OPENROWSET na cláusula FROM é avaliada separadamente e independentemente de qualquer chamada para essas funções usadas como destino da atualização, mesmo que argumentos idênticos sejam fornecidos para as duas chamadas. Em especial, as condições de filtragem ou de junção aplicadas ao resultado de uma dessas chamadas não têm qualquer efeito sobre os resultados da outra.

Permissões

Qualquer utilizador pode executar o OPENQUERY. As permissões usadas para se ligar ao servidor remoto são obtidas a partir das definições definidas para o servidor ligado.

Exemplos

A. Execução de uma consulta pass-through UPDATE

O exemplo seguinte utiliza uma consulta pass-through UPDATE contra o servidor ligado chamado OracleSvr.

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

B. Execução de uma consulta INSERT pass-through

O exemplo seguinte utiliza uma consulta pass-through INSERT contra o servidor ligado chamado OracleSvr.

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

C. Execução de uma consulta pass-through DELETE

O exemplo seguinte utiliza uma consulta de passagem DELETE para eliminar a linha inserida no exemplo B.

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

D. Execução de uma consulta pass-through SELECT

O exemplo seguinte utiliza uma consulta pass-through SELECT para selecionar a linha inserida no exemplo B.

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

Ver também

DELETE (Transact-SQL)
FROM (Transact-SQL)
INSERIR (Transact-SQL)
OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)
ATUALIZAÇÃO (Transact-SQL)
ONDE (Transact-SQL)