Partager via


OPENQUERY (Transact-SQL)

S’applique à : SQL Server Azure SQL Managed Instance

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 jeux de résultats, OPENQUERY ne renvoie que le premier.

Conventions 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.

Remarques

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

R. 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 B.

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

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

L’exemple suivant exécute une requête directe SELECT pour sélectionner la ligne insérée dans l’exemple B.

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

Voir aussi

DELETE (Transact-SQL)
FROM (Transact-SQL)
INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)