Sintaks salah dekat ')' memanggil prosedur yang tersimpan dengan GETDATE


121

Mungkin saya mengalami momen 'sore', tetapi adakah yang bisa menjelaskan mengapa saya mendapatkannya

Psn 102, Level 15, Status 1, Baris 2
Sintaks salah dekat ')'.

Saat berlari

CREATE PROC DisplayDate 
    (@DateVar DATETIME) 
AS 
BEGIN
    SELECT @DateVar
END
GO

EXEC DisplayDate GETDATE();

Jawaban:


170

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;

22
Apakah ada alasan untuk pembatasan ini?
Zameer

@siswa Apakah ada alasan untuk batasan dasar seperti kurangnya tipe kolom boolean dan integer atau kurangnya kunci yang difilter di Oracle ...?
Skipper

20

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'

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.