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 solo devuelve el primero.
Convenciones 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.
Comentarios
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
Las llamadas a OPENDATASOURCE, OPENQUERY u OPENROWSET en la cláusula FROM se evalúan por separado y de forma independiente de otras llamadas a estas funciones utilizadas como destino de la actualización, incluso si se han suministrado argumentos idénticos a las dos llamadas. En particular, las condiciones de filtro o combinación aplicadas en el resultado de una de esas llamadas no tienen ningún efecto en los resultados de la otra llamada.
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 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';
B.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');
C.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''');
Vea también
Referencia
Funciones de conjuntos de filas (Transact-SQL)
sp_addlinkedserver (Transact-SQL)