Вам необходимо использовать промежуточную переменную.SQL Server не поддерживает такого рода операции в самом списке параметров, хотя он был в списке TODO в течение нескольких лет!(См. Элемент подключения: используйте скалярные функции в качестве параметров хранимой процедуры )
Грамматика для 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