Maison > base de données > tutoriel mysql > Comment puis-je transmettre des paramètres à une OPENQUERY dans SQL Server ?

Comment puis-je transmettre des paramètres à une OPENQUERY dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-14 12:27:42
original
356 Les gens l'ont consulté

How Can I Pass Parameters to an OPENQUERY in SQL Server?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal