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.

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()

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())

13

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

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

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.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.