Passer une variable à une requête de serveur lié

Cet article explique comment passer une variable à une requête de serveur lié.

Version du produit d’origine : SQL Server documentation en ligne
Numéro de la base de connaissances d’origine : 314520

Résumé

Lorsque vous interrogez un serveur lié, vous effectuez fréquemment une requête directe qui utilise l’instruction OPENQUERY, OPENROWSETou OPENDATASOURCE . Vous pouvez consulter les exemples dans SQL Server documentation en ligne pour voir comment procéder à l’aide de chaînes Transact-SQL prédéfinies, mais il n’existe aucun exemple illustrant comment passer une variable à ces fonctions. Cet article fournit trois exemples de transmission d’une variable à une requête de serveur lié.

Pour passer une variable à l’une des fonctions directes, vous devez générer une requête dynamique.

Toutes les données qui incluent des guillemets nécessitent une gestion particulière.

Passer des valeurs de base

Lorsque l’instruction Transact-SQL de base est connue, mais que vous devez passer une ou plusieurs valeurs spécifiques, utilisez un code similaire à l’exemple suivant :

DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)

Passer l’intégralité de la requête

Lorsque vous devez transmettre l’intégralité de la requête Transact-SQL ou le nom du serveur lié (ou les deux), utilisez un code similaire à l’exemple suivant :

DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'MyLinkedServer'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')'
EXEC (@OPENQUERY+@TSQL)

Utiliser la procédure stockée Sp_executesql

Pour éviter les guillemets multicouches, utilisez du code similaire à l’exemple suivant :

DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR

Voir aussi

Pour plus d’informations, voir les rubriques suivantes :