Funkcja SQL jako domyślna wartość parametru?

105

Próbowałem zmienić domyślną wartość parametru za pomocą tego:

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

i wszystko, co dał mi prekompilator SQL, to ten błąd:

Msg 102, poziom 15, stan 1, procedura my_sp, wiersz 8 Niepoprawna składnia w pobliżu „(”.

Stworzyłem już procedurę. (Nie jestem pewien, czy to ma znaczenie). Używałem domyślnej wartości zerowej i sprawdzałem ją później, ale to nie wydaje się właściwe. Czy mogę to zrobić w jednej linii?


Aktualizacja: wychodziłem z opisu MSDN parametrów procedury składowanej :

[= wartość domyślna] To wartość domyślna parametru. Jeśli zdefiniowano wartość domyślną, funkcję można wykonać bez określania wartości tego parametru.

Uwaga:
Dla funkcji CLR można określić domyślne wartości parametrów, z wyjątkiem typów danych varchar (max) i varbinary (max).

Jeśli parametr funkcji ma wartość domyślną, słowo kluczowe DEFAULT musi zostać określone, gdy funkcja jest wywoływana w celu pobrania wartości domyślnej. To zachowanie różni się od używania parametrów z wartościami domyślnymi w procedurach składowanych, w których pominięcie parametru oznacza również wartość domyślną.

Czy źle to czytam?

Wielkie dzięki.

user58044
źródło

Odpowiedzi:

161

Wartością domyślną parametru procedury składowane muszą być stałe . Musisz wykonać następujące czynności ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()
Brian Kim
źródło
36
lub SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace
Używałem tego wcześniej. „Używałem zerowej wartości domyślnej i sprawdzałem ją później, ale nie wydaje się to właściwe”. Wciąż dziękuję Brian.
user58044
To rozwiązanie jest idealne.
R.Katnaan,
35

Nie sądzę, żeby to było możliwe, musisz domyślnie użyć wartości dosłownej (stałej).

Możesz jednak to zrobić:

Set @currentDate = Coalesce(@currentDate , GetDate())
Otávio Décio
źródło
13

Możesz spróbować w następujący sposób:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())
R. Katnaan
źródło
8

Wnioskuję, że używasz Microsoft SQL Server z nawiasów kwadratowych w twoim przykładzie.

Z MSDN :

Tylko stała wartość, taka jak ciąg znaków; funkcja skalarna (funkcja systemowa, zdefiniowana przez użytkownika lub funkcja CLR); lub NULL może być używany jako domyślny.

Funkcja GETDATE()od czasu do czasu zwraca inną wartość, więc nie jest wyrażeniem stałym.

Bill Karwin
źródło
2

Ta wartość nie jest deterministyczna i nie może być używana

SQLMenace
źródło
0

Sugestia:

Ustaw wartość domyślną na NULL

Zrób domyślne GETDATE()w interfejsie.

MarlonRibunal
źródło