Passer des paramètres à OPENQUERY dans SQL Server
L'instruction OPENQUERY
de SQL Server exécute des requêtes sur les serveurs liés. Cependant, l'intégration directe de paramètres dans l'instruction OPENQUERY
n'est pas prise en charge. La documentation de Microsoft indique clairement que OPENQUERY
n'accepte pas les variables comme arguments. Explorons des solutions de contournement efficaces :
Méthode 1 : Valeurs de codage en dur (pour un nombre limité de paramètres)
Cette approche convient lorsque vous ne devez transmettre que quelques valeurs spécifiques. La concaténation de chaînes est utilisée pour construire la requête :
<code class="language-sql">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);</code>
Méthode 2 : Construction de requêtes dynamiques (pour des requêtes plus complexes ou des noms de serveurs liés dynamiquement)
Pour les requêtes ou les scénarios plus complexes dans lesquels le nom du serveur lié est variable, Dynamic SQL propose une solution :
<code class="language-sql">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);</code>
Méthode 3 : Utiliser sp_executesql
(pour minimiser les problèmes de citation)
Pour éviter une concaténation de chaînes complexe et des problèmes potentiels de citation, sp_executesql
propose une solution plus propre :
<code class="language-sql">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;</code>
Ces méthodes offrent des moyens pratiques d'incorporer des paramètres dans vos instructions OPENQUERY
, permettant une interaction efficace avec les serveurs liés. Choisissez la méthode la mieux adaptée à vos besoins spécifiques et à votre complexité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!