OPENQUERY (Transact-SQL)

Ejecuta la consulta de paso a través especificada en el servidor vinculado especificado. Este servidor es un origen de datos OLE DB. Se puede hacer referencia a OPENQUERY en la cláusula FROM de una consulta como si fuera un nombre de tabla. También se puede hacer referencia a OPENQUERY como la tabla de destino de una instrucción INSERT, UPDATE, DELETE o TRUNCATE. Esto está sujeto a las capacidades del proveedor OLE DB. Aunque la consulta puede devolver varios conjuntos de resultados, OPENQUERY sólo devuelve el primero.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

OPENQUERY ( linked_server ,'query' )

Argumentos

  • linked_server
    Es un identificador que representa el nombre del servidor vinculado.

  • 'query'
    Es la cadena de consulta que se ejecuta en el servidor vinculado. La longitud máxima de la cadena es de 8 KB.

Notas

OPENQUERY no acepta variables para sus argumentos.

No se puede utilizar OPENQUERY para ejecutar procedimientos almacenados extendidos en un servidor vinculado. Sin embargo, se puede ejecutar un procedimiento almacenado extendido en un servidor vinculado mediante un nombre de cuatro partes. Por ejemplo:

EXEC SeattleSales.master.dbo.xp_msver

Permisos

Cualquier usuario puede ejecutar OPENQUERY. Los permisos utilizados para conectarse al servidor remoto se obtienen de la configuración definida para el servidor vinculado.

Ejemplos

A. Ejecutar una consulta SELECT de paso a través

En el siguiente ejemplo se crea un servidor vinculado denominado OracleSvr para una base de datos de Oracle mediante el proveedor Microsoft OLE DB para Oracle. En este ejemplo se utiliza una consulta SELECT de paso a través en este servidor vinculado.

[!NOTA]

En este ejemplo se supone que se ha creado un alias de base de datos Oracle denominado ORCLDB.

EXEC sp_addlinkedserver 'OracleSvr', 
   'Oracle 7.3', 
   'MSDAORA', 
   'ORCLDB';
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles'); 
GO

B. Ejecutar una consulta UPDATE de paso a través

En el ejemplo siguiente se usa una consulta UPDATE de paso a través en el servidor vinculado creado en el ejemplo A.

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

C. Ejecutar una consulta INSERT de paso a través

En el ejemplo siguiente se usa una consulta INSERT de paso a través en el servidor vinculado creado en el ejemplo A.

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

D. Ejecutar una consulta DELETE de paso a través

En el ejemplo siguiente se usa una consulta DELETE de paso a través para eliminar la columna insertada en el ejemplo C.

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