Varsayılan parametre değeri olarak SQL işlevi?


105

Bununla varsayılan bir parametre değerini değiştirmeyi denedim:

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

ve ön derleyicinin bana verdiği tüm SQL şu hataydı:

Msg 102, Seviye 15, Durum 1, Prosedür my_sp, Satır 8 '(' yakınında yanlış sözdizimi.

Prosedürü zaten oluşturdum. (Bunun alakalı olup olmadığından emin değilim.) Boş bir varsayılan değer kullanıyordum ve bunu daha sonra kontrol ediyordum, ancak bu doğru görünmüyor. Bunu tek satırda yapabilir miyim?


Güncelleme: MSDN'nin saklı yordam parametreleri açıklamasından çıkıyordum :

[= varsayılan] Parametre için varsayılan bir değerdir. Varsayılan bir değer tanımlanmışsa, işlev o parametre için bir değer belirtmeden yürütülebilir.

Not:
Varsayılan parametre değerleri, varchar (max) ve varbinary (max) veri türleri dışında CLR fonksiyonları için belirtilebilir.

İşlevin bir parametresinin varsayılan bir değeri olduğunda, varsayılan değeri almak için işlev çağrıldığında VARSAYILAN anahtar sözcüğü belirtilmelidir. Bu davranış, parametrenin çıkarılmasının aynı zamanda varsayılan değer anlamına geldiği saklı yordamlarda varsayılan değerlere sahip parametreleri kullanmaktan farklıdır.

Bunu yanlış mı okuyorum?

Çok teşekkürler.

Yanıtlar:


161

Saklanan prosedürler parametresi için varsayılan değer sabit olmalıdır . Aşağıdakileri yapmanız gerekir ...

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

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

Bunu daha önce kullanıyordum. "Boş varsayılan bir değer kullanıyordum ve bunu daha sonra kontrol ediyordum ama bu doğru görünmüyor." Yine de teşekkürler Brian.
user58044

Bu çözüm mükemmel.
R.Katnaan

35

Bunun mümkün olduğunu sanmıyorum, varsayılan olarak değişmez (sabit) bir değer kullanmanız gerekir.

Ancak bunu yapabilirsiniz:

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

13

Aşağıdaki gibi deneyebilirsiniz:

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

8

Örneğinizdeki köşeli parantezlerden Microsoft SQL Server kullandığınızı anlıyorum.

Gönderen MSDN :

Yalnızca bir karakter dizesi gibi sabit bir değer; skaler bir işlev (bir sistem, kullanıcı tanımlı veya CLR işlevi); veya NULL varsayılan olarak kullanılabilir.

İşlev GETDATE(), zaman zaman farklı bir değer döndürür, bu nedenle sabit bir ifade değildir.



0

Öneri:

Varsayılanı şu şekilde ayarlayın: NULL

Varsayılanı GETDATE()ön uçta yapın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.