Трябва да използвате междинна променлива. SQL Server не поддържа този вид операция в самия списък с параметри, въпреки че е в списъка със задачи от няколко години! (Вижте Свързване на елемент:Използвайте скаларни функции като параметри на запаметени процедури)
Граматиката за EXEC
е
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
Документацията в момента не е толкова ясна относно приемлив формат за value
но изглежда, че са само "прости" изрази като буквални стойности или @@
системни функции с префикс (като @@IDENTITY
). Други системни функции като SCOPE_IDENTITY()
не са разрешени (дори тези, които не изискват скоби, като CURRENT_TIMESTAMP
не са разрешени).
Така че за момента трябва да използвате синтаксис като следния
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