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 la 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

Tout appel à OPENDATASOURCE, OPENQUERY ou OPENROWSET dans la clause FROM est évalué séparément et indépendamment de tout appel à ces fonctions utilisées comme cible de la mise à jour, même si des arguments identiques sont fournis aux deux appels. En particulier, les conditions de filtre ou de jointure appliquées sur le résultat de l'un de ces appels n'ont aucun effet sur les résultats de l'autre.

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 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';

B. 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');

C. 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''');