Você precisa usar uma variável intermediária. O SQL Server não suporta esse tipo de operação na própria lista de parâmetros, embora esteja na lista TODO há alguns anos! (Consulte Connect Item:Use funções escalares como parâmetros de procedimento armazenado)
A gramática para
EXEC
é [ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
A documentação atualmente não é tão clara em um formato aceitável para
value
mas parece ser apenas expressões "simples", como valores literais ou @@
funções de sistema prefixadas (como @@IDENTITY
). Outras funções do sistema, como SCOPE_IDENTITY()
não são permitidos (mesmo aqueles que não requerem parênteses como CURRENT_TIMESTAMP
não é permitido). Então, por enquanto, você precisa usar sintaxe como a abaixo
DECLARE @pID INT;
SET @pID = 1;
/*If 2008+ for previous versions this needs to be two separate statements*/
DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11))
EXEC WriteLog
'Component',
'Source',
@string