Compartilhar via


OPENQUERY (Transact-SQL)

Executa a consulta de passagem especificada no servidor vinculado especificado. Esse servidor é uma fonte de dados OLE DB. OPENQUERY pode ser referenciada na cláusula FROM de uma consulta como se fosse um nome de tabela. OPENQUERY também pode ser referenciada como a tabela de destino de uma instrução INSERT, UPDATE ou DELETE. Isso dependerá dos recursos do provedor OLE DB. Embora a consulta possa retornar vários conjuntos de resultados, OPENQUERY retorna somente o primeiro deles.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

OPENQUERY ( linked_server ,'query' )

Argumentos

  • linked_server
    É um identificador que representa o nome do servidor vinculado.

  • 'query'
    É a cadeia de caracteres de consulta executada no servidor vinculado. O comprimento máximo da cadeia de caracteres é 8 KB.

Comentários

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

OPENQUERY não pode ser usado para executar procedimentos armazenados estendidos em um servidor vinculado. Porém, um procedimento armazenado estendido pode ser executado em um servidor vinculado 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 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. 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.

Permissões

Qualquer usuário pode executar OPENQUERY. As permissões que são usadas para conectar ao servidor remoto são obtidas das configurações definidas para o servidor vinculado.

Exemplos

A. Executando uma consulta passagem UPDATE

O exemplo a seguir usa uma consulta de passagem UPDATE no servidor vinculado criado no exemplo A.

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

B. Executando uma consulta passagem INSERT

O exemplo a seguir usa uma consulta de passagem INSERT no servidor vinculado criado no exemplo A.

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

C. Executando um consulta passagem DELETE

O exemplo a seguir usa uma consulta de passagem DELETE para excluir a linha inserida no exemplo C.

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