Partager via


OPENQUERY (Transact-SQL)

Exécute la requête directe spécifiée sur le serveur lié spécifié. Ce serveur est une source de données OLE DB. Il est possible de référencer OPENQUERY dans la clause FROM d'une requête SELECT comme s'il s'agissait du nom d'une table. Il est également possible de référencer OPENQUERY comme la table cible d'une instruction INSERT, UPDATE ou DELETE. Cela dépend des possibilités du fournisseur OLE DB. Bien que la requête puisse renvoyer plusieurs ensembles de résultats, OPENQUERY ne renvoie que le premier.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

OPENQUERY ( linked_server ,'query' )

Arguments

  • linked_server
    ID représentant le nom du serveur lié.

  • 'query'
    Chaîne de requête exécutée dans le serveur lié. La longueur maximale de la chaîne est limitée à 8 Ko.

Notes

OPENQUERY n'accepte pas de variables pour ses arguments.

Vous ne pouvez pas utiliser OPENQUERY pour exécuter des procédures stockées étendues sur un serveur lié. Par contre, une procédure stockée étendue peut être exécutée sur un serveur lié en utilisant un nom en quatre parties. Par exemple :

EXEC SeattleSales.master.dbo.xp_msver

Autorisations

Tous les utilisateurs peuvent exécuter OPENQUERY. Les autorisations utilisées pour la connexion au serveur distant sont obtenues à partir des paramètres définis pour le serveur lié.

Exemples

A. Exécution d'une requête SELECT directe

L'exemple suivant crée un serveur lié, nommé OracleSvr, qui est associé à une base de données Oracle à l'aide du fournisseur Microsoft OLE DB pour Oracle. Il exécute ensuite une requête SELECT directe sur ce serveur lié.

[!REMARQUE]

Ce code exemple suppose qu'un alias de base de données Oracle a été créé avec le nom ORCLDB.

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

B. Exécution d'une requête UPDATE directe

L'exemple suivant exécute une requête UPDATE directe sur le serveur lié créé dans l'exemple A.

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

C. Exécution d'une requête INSERT directe

L'exemple suivant exécute une requête INSERT directe sur le serveur lié créé dans l'exemple A.

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

D. Exécution d'une requête DELETE directe

L'exemple suivant exécute une requête DELETE directe pour supprimer la ligne insérée dans l'exemple C.

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