Можно ли по умолчанию для параметра хранимой процедуры sql использовать динамическое выражение? - PullRequest
6 голосов
/ 08 марта 2011

Я хочу иметь параметр "@myDate" в хранимой процедуре, который по умолчанию равен 2 годам до сегодняшнего дня, если ничего не указано. Я попытался сделать что-то подобное в моем определении процедуры:

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

Я получаю следующую синтаксическую ошибку:

Incorrect syntax near '('.

Позволяет ли sql server устанавливать динамические выражения в качестве значений параметров по умолчанию? Если нет, как я могу обойти это (кроме неуклюжий IF @myDate is null SET @myDate=...)?

Ответы [ 2 ]

9 голосов
/ 08 марта 2011

Вы не можете использовать выражение в качестве значения по умолчанию, и нет действительно элегантного способа сделать это.

Вы можете использовать isnull или coalesce вместо оператора if:

set @myDate = isnull(@myDate, dateadd(year, -2, getdate()))
1 голос
/ 08 марта 2011

номер

Из документов :

Значение по умолчанию должно быть константой или это может быть NULL

...