Musíte použít střední proměnnou. SQL Server nepodporuje tento druh operace v samotném seznamu parametrů, ačkoli je na seznamu TODO již několik let! (Viz Připojit položku:Použití skalárních funkcí jako parametrů uložené procedury)
Gramatika pro EXEC
je
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
Dokumentace aktuálně není tak jasná, pokud jde o přijatelný formát pro value
ale zdá se, že jde pouze o "jednoduché" výrazy, jako jsou doslovné hodnoty nebo @@
systémové funkce s předponou (jako je @@IDENTITY
). Další systémové funkce, jako je SCOPE_IDENTITY()
nejsou povoleny (dokonce i ty, které nevyžadují závorky, jako je CURRENT_TIMESTAMP
nejsou povoleny).
Takže prozatím musíte používat syntaxi, jako je níže
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