Vous devez utiliser une variable intermédiaire. SQL Server ne prend pas en charge ce type d'opération dans la liste des paramètres elle-même, bien qu'elle figure sur la liste TODO depuis quelques années ! (Voir Connect Item :Utiliser des fonctions scalaires comme paramètres de procédure stockée)
La grammaire pour EXEC
est
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
La documentation n'est actuellement pas aussi claire sur un format acceptable pour value
mais il semble que ce ne soient que des expressions "simples" telles que des valeurs littérales ou @@
fonctions système préfixées (telles que @@IDENTITY
). Autres fonctions système telles que SCOPE_IDENTITY()
ne sont pas autorisés (même ceux qui ne nécessitent pas de parenthèses comme CURRENT_TIMESTAMP
ne sont pas autorisés).
Donc, pour le moment, vous devez utiliser une syntaxe telle que celle ci-dessous
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