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.