sql >> Base de Datos >  >> RDS >> Sqlserver

T-SQL:no se puede pasar una cadena concatenada como argumento al procedimiento almacenado

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