Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

T-SQL:Não é possível passar string concatenada como argumento para procedimento armazenado


A instrução EXECUTE simplesmente tem uma gramática diferente de outras instruções como SELECT e SET. Por exemplo, observe a seção de sintaxe na parte superior das duas páginas a seguir.

Declaração EXECUTE:http://msdn.microsoft.com/en-us/ library/ms188332.aspx

Instrução SET:http://msdn.microsoft.com/en-us/ library/ms189484.aspx

A sintaxe para EXECUTE aceita apenas um valor

Enquanto a sintaxe para SET aceita uma expressão

Um valor é basicamente apenas uma constante codificada, mas uma expressão será avaliada. É como ter o varchar 'SELECT 1 + 1'. É apenas um valor varchar agora. No entanto, você pode avaliar a string assim:
EXEC('SELECT 1 + 1')

Suponho que tudo o que estou apontando é que o comando EXEC não permite expressões por definição, o que você aparentemente já descobriu. Não sei qual era a intenção dos desenvolvedores do T-SQL quando o fizeram assim. Suponho que a gramática ficaria fora de controle se você tivesse permissão para lançar subconsultas dentro de subconsultas na lista de parâmetros de um procedimento armazenado.

Expressão T-SQL:http://msdn.microsoft.com/en- us/library/ms190286.aspx