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.
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
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 SELECT de passagem
O exemplo a seguir cria um servidor vinculado chamado OracleSvr no banco de dados Oracle usando o Microsoft OLE DB Provider for Oracle. Assim, este exemplo usa uma consulta de passagem SELECT nesse servidor vinculado.
Observação |
---|
Este exemplo supõe que um alias de banco de dados Oracle chamado ORCLDB seja criado. |
EXEC sp_addlinkedserver 'OracleSvr',
'Oracle 7.3',
'MSDAORA',
'ORCLDB';
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles');
GO
B. Executando uma consulta de 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';
C. Executando uma consulta de 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');
D. Executando um consulta de 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''');
Consulte também