La declaración EXECUTE simplemente tiene una gramática diferente a otras declaraciones como SELECT y SET. Por ejemplo, observe la sección de sintaxis en la parte superior de las siguientes dos páginas.
Declaración EXECUTE:http://msdn.microsoft.com/en-us/ biblioteca/ms188332.aspx
Declaración SET:http://msdn.microsoft.com/en-us/ biblioteca/ms189484.aspx
La sintaxis de EXECUTE solo acepta un valor
Mientras que la sintaxis de SET acepta una expresión
Un valor es básicamente una constante codificada de forma rígida, pero se evaluará una expresión. Es como tener el varchar 'SELECT 1 + 1'. Es solo un valor varchar en este momento. Sin embargo, puede evaluar la cadena como esta:
EXEC('SELECT 1 + 1')
Supongo que todo lo que estoy señalando es que el comando EXEC no permite expresiones por definición, lo cual aparentemente ya descubriste. No sé cuál fue la intención de los desarrolladores de T-SQL cuando lo hicieron de esa manera. Supongo que la gramática se saldría de control si se le permitiera lanzar subconsultas dentro de subconsultas en la lista de parámetros de un procedimiento almacenado.
Expresión T-SQL:http://msdn.microsoft.com/en- us/library/ms190286.aspx