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