OPENQUERY (Transact-SQL)OPENQUERY (Transact-SQL)

S’APPLIQUE À : ouiSQL Server (à partir de 2008) nonAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Exécute la requête directe spécifiée sur le serveur lié spécifié.Executes the specified pass-through query on the specified linked server. Ce serveur est une source de données OLE DB.This server is an OLE DB data source. 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.OPENQUERY can be referenced in the FROM clause of a query as if it were a table name. Il est également possible de référencer OPENQUERY comme la table cible d'une instruction INSERT, UPDATE ou DELETE.OPENQUERY can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement. Cela dépend des possibilités du fournisseur OLE DB.This is subject to the capabilities of the OLE DB provider. Bien que la requête puisse renvoyer plusieurs jeux de résultats, OPENQUERY ne renvoie que le premier.Although the query may return multiple result sets, OPENQUERY returns only the first one.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

OPENQUERY ( linked_server ,'query' )  

ArgumentsArguments

linked_serverlinked_server
ID représentant le nom du serveur lié.Is an identifier representing the name of the linked server.

' query '' query '
Chaîne de requête exécutée dans le serveur lié.Is the query string executed in the linked server. La longueur maximale de la chaîne est limitée à 8 Ko.The maximum length of the string is 8 KB.

Notes Remarks

OPENQUERY n'accepte pas de variables pour ses arguments.OPENQUERY does not accept variables for its arguments.

Vous ne pouvez pas utiliser OPENQUERY pour exécuter des procédures stockées étendues sur un serveur lié.OPENQUERY cannot be used to execute extended stored procedures on a linked server. Par contre, une procédure stockée étendue peut être exécutée sur un serveur lié en utilisant un nom en quatre parties.However, an extended stored procedure can be executed on a linked server by using a four-part name. Exemple :For example:

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.Any call to OPENDATASOURCE, OPENQUERY, or OPENROWSET in the FROM clause is evaluated separately and independently from any call to these functions used as the target of the update, even if identical arguments are supplied to the two calls. 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.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

PermissionsPermissions

Tous les utilisateurs peuvent exécuter OPENQUERY.Any user can execute OPENQUERY. Les autorisations utilisées pour la connexion au serveur distant sont obtenues à partir des paramètres définis pour le serveur lié.The permissions that are used to connect to the remote server are obtained from the settings defined for the linked server.

ExemplesExamples

A.A. Exécution d'une requête UPDATE directeExecuting an UPDATE pass-through query

L'exemple suivant exécute une requête UPDATE directe sur le serveur lié créé dans l'exemple A.The following example uses a pass-through UPDATE query against the linked server created in example A.

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

B.B. Exécution d'une requête INSERT directeExecuting an INSERT pass-through query

L'exemple suivant exécute une requête INSERT directe sur le serveur lié créé dans l'exemple A.The following example uses a pass-through INSERT query against the linked server created in example A.

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

C.C. Exécution d'une requête DELETE directeExecuting a DELETE pass-through query

L'exemple suivant exécute une requête DELETE directe pour supprimer la ligne insérée dans l'exemple C.The following example uses a pass-through DELETE query to delete the row inserted in example C.

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

D.D. Exécution d'une requête SELECT directeExecuting a SELECT pass-through query

L’exemple suivant exécute une requête directe SELECT pour sélectionner la ligne insérée dans l’exemple C.The following example uses a pass-through SELECT query to select the row inserted in example C.

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

 Voir aussiSee Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL) OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Fonctions d’ensemble de lignes (Transact-SQL) Rowset Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL) sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)