2011-03-08 15 views
6

Chcę mieć parametr "@myDate" w procedurze przechowywanej, która domyślnie wynosi 2 lata przed dniem dzisiejszym, jeśli nic innego nie jest określone. Próbowałem robić coś takiego w mojej definicji procedury:Czy mogę domyślnie parametr procedury składowanej sql do wyrażenia dynamicznego?

CREATE PROCEDURE myProcedure( @param1 int, 
           @param2 varchar(20), 
           @param3 int = null, 
           @myDate datetime = dateadd(year,-2,getDate())) 

Dostaję następujący błąd składni:

Incorrect syntax near '('. 

Czy SQL Server pozwalają ustawić wyrażeń dynamicznych jako wartości domyślne parametrów? Jeśli nie, jak mogę to obejść (poza niezręcznym IF @myDate is null SET @myDate=...)?

+0

Istnieje cienka linia między niezdarny i leniwy. –

Odpowiedz

9

Nie można użyć wyrażenia jako wartość domyślną, i nie ma naprawdę elegancki sposób to zrobić.

Można użyć isnull lub coalesce zamiast rachunku if:

set @myDate = isnull(@myDate, dateadd(year, -2, getdate())) 
+0

dzięki! Mogę skończyć używając tej sugestii ... – froadie

1

nr

Z docs:

The default value must be a constant or it can be NULL