Câu trả lời:
Bạn không thể chuyển một lệnh gọi hàm làm đối số cho thủ tục đã lưu trữ của mình. Thay vào đó, hãy sử dụng một biến trung gian:
DECLARE @tmp DATETIME
SET @tmp = GETDATE()
EXEC DisplayDate @tmp;
Như Mitch Wheat đã đề cập, bạn không thể vượt qua một hàm.
Nếu trong trường hợp của bạn, bạn nên chuyển một giá trị được tính toán trước hoặc GETDATE () - bạn có thể sử dụng giá trị mặc định. Ví dụ: sửa đổi thủ tục đã lưu trữ của bạn:
ALTER PROC DisplayDate
(
@DateVar DATETIME = NULL
) AS
BEGIN
set @DateVar=ISNULL(@DateVar,GETDATE())
--the SP stuff here
SELECT @DateVar
END
GO
Và sau đó thử:
EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate
Lưu ý : Ở đây tôi cho rằng giá trị NULL không được sử dụng cho tham số này. Nếu đó không phải là trường hợp của bạn - bạn có thể sử dụng một giá trị chưa sử dụng khác, ví dụ: '1900-01-01 00: 00: 00.000'