Maison >base de données >tutoriel mysql >Comment corriger les erreurs « Syntaxe incorrecte près de « » » dans les requêtes OPENROWSET avec des variables ?

Comment corriger les erreurs « Syntaxe incorrecte près de « » » dans les requêtes OPENROWSET avec des variables ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 22:53:41854parcourir

How to Fix

Dépannage des requêtes OPENROWSET avec des variables

Lorsque vous utilisez la fonction OPENROWSET pour accéder à des données externes, vous pouvez rencontrer des erreurs si vous incluez des expressions variables dans le chaîne de requête. Un tel exemple est l'erreur « Syntaxe incorrecte près de « » ». Cela se produit lorsque vous essayez de concaténer une variable avec l'instruction OPENROWSET, comme le montre la requête suivante :

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

Dans cette requête, la variable @id est ajoutée à l'instruction EXEC à l'aide de l'opérateur ' ' . Cependant, OPENROWSET ne prend pas en charge l'utilisation d'expressions dans sa chaîne de requête.

Solution :

Pour résoudre ce problème, vous ne pouvez pas utiliser directement des variables dans la requête OPENROWSET. Au lieu de cela, vous pouvez créer du SQL dynamique pour transmettre les paramètres. 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)

Dans cette solution, nous définissons une variable @sql pour contenir la requête SQL dynamique et concaténons la variable @ID à l'aide de la fonction CONVERT(). Cela nous permet d'exécuter l'instruction SQL dynamique avec le paramètre souhaité.

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