Fungsi SQL sebagai nilai parameter default?


105

Saya mencoba mengubah nilai parameter default dengan ini:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

dan semua yang diberikan pra-kompilator SQL kepada saya adalah kesalahan ini:

Psn 102, Level 15, Status 1, Prosedur my_sp, Baris 8 Sintaks salah dekat '('.

Saya sudah membuat prosedur. (Saya tidak yakin apakah itu relevan.) Saya menggunakan nilai default null dan memeriksanya nanti, tetapi tampaknya tidak tepat. Bisakah saya melakukan ini dalam satu baris?


Pembaruan: Saya keluar dari deskripsi MSDN tentang parameter prosedur tersimpan :

[= default] Adalah nilai default untuk parameter. Jika nilai default ditentukan, fungsi tersebut dapat dijalankan tanpa menentukan nilai untuk parameter itu.

Catatan:
Nilai parameter default dapat ditentukan untuk fungsi CLR kecuali untuk tipe data varchar (max) dan varbinary (max).

Ketika parameter fungsi memiliki nilai default, kata kunci DEFAULT harus ditentukan saat fungsi dipanggil untuk mengambil nilai default. Perilaku ini berbeda dengan menggunakan parameter dengan nilai default dalam prosedur tersimpan yang menghilangkan parameter juga menyiratkan nilai default.

Apakah saya salah membaca ini?

Terimakasih banyak.

Jawaban:


160

Nilai default untuk parameter prosedur tersimpan harus berupa konstanta . Anda perlu melakukan hal berikut ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

36
atau SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace

Saya menggunakan itu sebelumnya. "Saya menggunakan nilai default nol dan memeriksanya nanti, tetapi tampaknya tidak tepat." Terima kasih Brian.
pengguna58044

Solusi ini sempurna.
R.Katnaan

35

Saya tidak berpikir itu mungkin, Anda harus menggunakan nilai literal (konstan) sebagai default.

Bagaimanapun Anda bisa melakukan ini:

Set @currentDate = Coalesce(@currentDate , GetDate())

13

Anda dapat mencoba sebagai berikut:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

8

Saya menyimpulkan Anda menggunakan Microsoft SQL Server dari tanda kurung siku dalam contoh Anda.

Dari MSDN :

Hanya nilai konstan, seperti string karakter; fungsi skalar (baik sistem, yang ditentukan pengguna, atau fungsi CLR); atau NULL dapat digunakan sebagai default.

Fungsi GETDATE()mengembalikan nilai yang berbeda dari waktu ke waktu, jadi ini bukan ekspresi konstan.



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.