Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL :impossible de transmettre une chaîne concaténée en tant qu'argument à la procédure stockée

L'instruction EXECUTE a simplement une grammaire différente de celle d'autres instructions telles que SELECT et SET. Par exemple, observez la section de syntaxe en haut des deux pages suivantes.

Instruction EXECUTE :http://msdn.microsoft.com/en-us/ bibliothèque/ms188332.aspx

Instruction SET :http://msdn.microsoft.com/en-us/ bibliothèque/ms189484.aspx

La syntaxe pour EXECUTE n'accepte qu'une valeur

Alors que la syntaxe de SET accepte une expression

Une valeur est simplement une constante codée en dur, mais une expression va être évaluée. C'est comme avoir le varchar 'SELECT 1 + 1'. C'est juste une valeur varchar en ce moment. Cependant, vous pouvez évaluer la chaîne comme ceci :

EXEC('SELECT 1 + 1')

Je suppose que tout ce que je signale, c'est que la commande EXEC n'autorise pas les expressions par définition, ce que vous avez apparemment déjà découvert. Je ne sais pas quelle était l'intention des développeurs de T-SQL lorsqu'ils l'ont fait de cette façon. Je suppose que la grammaire deviendrait incontrôlable si vous étiez autorisé à lancer des sous-requêtes dans des sous-requêtes dans la liste des paramètres d'une procédure stockée.

Expression T-SQL :http://msdn.microsoft.com/en- us/library/ms190286.aspx