Musisz użyć zmiennej pośredniej. SQL Server nie obsługuje tego rodzaju operacji w samej liście parametrów, chociaż znajduje się na liście TODO od kilku lat! (Zobacz Połącz element:Użyj funkcji skalarnych jako parametrów procedury składowanej)
Gramatyka EXEC
jest
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
Dokumentacja nie jest obecnie tak przejrzysta, jeśli chodzi o akceptowalny format dla value
ale wydaje się, że są to tylko „proste” wyrażenia, takie jak wartości dosłowne lub @@
funkcje systemowe z prefiksem (takie jak @@IDENTITY
). Inne funkcje systemowe, takie jak SCOPE_IDENTITY()
nie są dozwolone (nawet te, które nie wymagają nawiasów, takie jak CURRENT_TIMESTAMP
nie są dozwolone).
Więc na razie musisz używać składni takiej jak poniżej
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