Maison >base de données >tutoriel mysql >Comment gérer la substitution de variables dans les requêtes OPENROWSET ?

Comment gérer la substitution de variables dans les requêtes OPENROWSET ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-05 18:15:39685parcourir

How to Handle Variable Substitution in OPENROWSET Queries?

Substitution de variable dans les requêtes OPENROWSET

Cette requête rencontre une erreur lors de la tentative d'intégration dynamique d'une variable (@ID) dans une instruction OPENROWSET :

SELECT * 
FROM OPENROWSET(
    'SQLNCLI',
    'DRIVER={SQL Server};',
    'EXEC dbo.sProc1 @ID = ' + @id 
 )

Le message d'erreur indique une syntaxe incorrecte près de ' ', mettant en évidence la tentative de concaténer une chaîne avec une variable.

Pourquoi l'erreur se produit

OPENROWSET ne permet pas la substitution directe de variable. L'argument de chaîne transmis au fournisseur est évalué textuellement, empêchant l'évaluation et l'inclusion de variables.

Solution : Dynamic SQL

Pour intégrer des variables dans les requêtes OPENROWSET, vous devez utiliser des techniques SQL dynamiques :

  1. Déclarez la variable et initialisez-la avec un value.
  2. Construisez une chaîne SQL dynamique en concaténant l'instruction OPENROWSET avec la valeur de la variable.
  3. Préparez et exécutez le SQL dynamique.

Voici un exemple :

Declare @ID int
Declare @sql nvarchar(max)
Set @ID=1
Set @sql='SELECT * 
FROM OPENROWSET(
               ''SQLNCLI'',
               ''DRIVER={SQL Server};'',
               ''EXEC dbo.usp_SO @ID =' + convert(varchar(10),@ID) + ''')'

-- Print @sql
 Exec(@sql)

En utilisant du SQL dynamique, vous pouvez construire la chaîne du fournisseur au moment de l'exécution et inclure dynamiquement la variable valeurs.

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!

Déclaration:
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