Devi usare una variabile intermedia. SQL Server non supporta questo tipo di operazione nell'elenco dei parametri stesso sebbene sia presente nell'elenco TODO da alcuni anni! (Vedi elemento Connect:usa le funzioni scalari come parametri della procedura memorizzata)
La grammatica per EXEC
è
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
La documentazione al momento non è così chiara su un formato accettabile per value
ma sembra essere solo espressioni "semplici" come valori letterali o @@
funzioni di sistema prefissate (come @@IDENTITY
). Altre funzioni di sistema come SCOPE_IDENTITY()
non sono ammessi (anche quelli che non richiedono parentesi come CURRENT_TIMESTAMP
non sono ammessi).
Quindi per il momento è necessario utilizzare una sintassi come quella di seguito
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