Anda perlu menggunakan variabel perantara. SQL Server tidak mendukung operasi semacam ini dalam daftar parameter itu sendiri meskipun telah ada di daftar TODO selama beberapa tahun! (Lihat Connect Item:Menggunakan fungsi skalar sebagai parameter prosedur tersimpan)
Tata bahasa untuk EXEC
adalah
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
Dokumentasi saat ini tidak begitu jelas tentang format yang dapat diterima untuk value
tetapi tampaknya hanya ekspresi "sederhana" seperti nilai literal atau @@
fungsi sistem awalan (seperti @@IDENTITY
). Fungsi sistem lainnya seperti SCOPE_IDENTITY()
tidak diizinkan (bahkan yang tidak memerlukan tanda kurung seperti CURRENT_TIMESTAMP
tidak diperbolehkan).
Jadi untuk saat ini Anda perlu menggunakan sintaks seperti di bawah ini
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