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
, OPENROWSET
ou 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 :
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour