Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment transmettre une variable à une requête de serveur lié.
Version du produit d’origine : documentation en ligne de SQL Server
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 , OPENROWSETou OPENDATASOURCE l’instructionOPENQUERY. Vous pouvez afficher les exemples de la documentation en ligne de SQL Server pour voir comment procéder à l’aide de chaînes Transact-SQL prédéfinies, mais il n’existe aucun exemple de transmission d’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 transmettre une ou plusieurs valeurs spécifiques, utilisez du 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’ensemble de la requête Transact-SQL ou le nom du serveur lié (ou les deux), utilisez du 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 :