Bạn cần sử dụng một biến trung gian. SQL Server không hỗ trợ loại hoạt động này trong chính danh sách tham số mặc dù nó đã nằm trong danh sách CẦN LÀM trong một vài năm! (Xem Mục Kết nối:Sử dụng các hàm vô hướng làm tham số thủ tục được lưu trữ)
Ngữ pháp cho EXEC
là
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
Tài liệu hiện không rõ ràng về định dạng được chấp nhận cho giá trị value
nhưng nó dường như chỉ là các biểu thức "đơn giản" như giá trị chữ hoặc @@
các chức năng hệ thống có tiền tố (chẳng hạn như @@IDENTITY
). Các chức năng hệ thống khác như SCOPE_IDENTITY()
không được phép (ngay cả những thứ không yêu cầu dấu ngoặc đơn như CURRENT_TIMESTAMP
không được phép).
Vì vậy, trong lúc này bạn cần sử dụng cú pháp như dưới đây
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