Maison > base de données > tutoriel mysql > Comment puis-je utiliser les paramètres avec OPENQUERY de SQL Server ?

Comment puis-je utiliser les paramètres avec OPENQUERY de SQL Server ?

Linda Hamilton
Libérer: 2025-01-14 12:35:47
original
115 Les gens l'ont consulté

How Can I Use Parameters with SQL Server's OPENQUERY?

SQL Server OPENQUERY avec paramètres : solutions de contournement

Le OPENQUERY de SQL Server exécute des requêtes sur des serveurs liés, mais l'utilisation directe de variables dans ses arguments n'est pas prise en charge. Cela nécessite des solutions de contournement pour le passage des paramètres.

Méthode 1 : transmission de valeurs simples via la concaténation de chaînes

Pour les requêtes simples nécessitant des valeurs spécifiques, le SQL dynamique avec concaténation de chaînes est une solution viable :

<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 : transmettre l'intégralité de la requête sous forme de chaîne

Cette approche permet de transmettre dynamiquement la requête complète ou même le nom du serveur lié :

<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 : Utilisation de sp_executesql pour une gestion plus propre des paramètres

Pour éviter les citations imbriquées complexes, utilisez sp_executesql :

<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;
```  This method offers improved readability and reduces the risk of SQL injection vulnerabilities compared to string concatenation.  Note that you're executing `sp_executesql` on the linked server itself.


Choose the method that best suits your query complexity and preference for code clarity.  Remember to prioritize security and avoid SQL injection vulnerabilities when using dynamic SQL.</code>
Copier après la connexion

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