U moet een tussenvariabele gebruiken. SQL Server ondersteunt dit soort bewerkingen niet in de parameterlijst zelf, hoewel het al een paar jaar op de TODO-lijst staat! (Zie Connect Item:Gebruik scalaire functies als opgeslagen procedureparameters)
De grammatica voor EXEC
is
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
De documentatie is momenteel niet zo duidelijk over een acceptabel formaat voor value
maar het lijken alleen "eenvoudige" uitdrukkingen te zijn, zoals letterlijke waarden of @@
vooraf ingestelde systeemfuncties (zoals @@IDENTITY
). Andere systeemfuncties zoals SCOPE_IDENTITY()
zijn niet toegestaan (zelfs degenen die geen haakjes nodig hebben, zoals CURRENT_TIMESTAMP
zijn niet toegestaan).
Dus voorlopig moet je syntaxis gebruiken zoals de onderstaande
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