Jawaban:
Anda tidak bisa meneruskan panggilan fungsi sebagai argumen ke prosedur tersimpan Anda. Alih-alih gunakan variabel perantara:
DECLARE @tmp DATETIME
SET @tmp = GETDATE()
EXEC DisplayDate @tmp;
Seperti yang disebutkan Mitch Wheat, Anda tidak bisa melewatkan suatu fungsi.
Jika dalam kasus Anda, Anda harus meneruskan nilai yang telah dihitung sebelumnya atau GETDATE () - Anda dapat menggunakan nilai default. Misalnya, ubah prosedur tersimpan Anda:
ALTER PROC DisplayDate
(
@DateVar DATETIME = NULL
) AS
BEGIN
set @DateVar=ISNULL(@DateVar,GETDATE())
--the SP stuff here
SELECT @DateVar
END
GO
Dan kemudian coba:
EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate
Catatan : Di sini saya menduga bahwa nilai NULL tidak digunakan untuk parameter ini. Jika ini bukan kasus Anda - Anda dapat menggunakan nilai lain yang tidak digunakan, misalnya '1900-01-01 00: 00: 00.000'