Функция SQL как значение параметра по умолчанию?


Я попытался изменить значение параметра по умолчанию с помощью этого:

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

и весь предварительный компилятор SQL дал мне эту ошибку:

Msg 102, Уровень 15, состояние 1, процедура my_sp, строка 8 неверный синтаксис рядом с ' ('.

Я уже создал процедуру. (Я не уверен, что это имеет отношение.) Я использовал нулевое значение по умолчанию и проверял это позже, но это не кажется правильным. Могу ли я сделать это в одном линия?


Обновление: я собирался покинуть описание MSDN параметров хранимой процедуры:

[ = default] - значение по умолчанию для параметра. Если задано значение по умолчанию, функция может быть выполнена без указания значения для этого параметра.

Примечание:
Для функций среды CLR можно задать значения параметров по умолчанию, за исключением данных varchar (max) и varbinary (max типы.

если параметр функции имеет значение по умолчанию, ключевое слово DEFAULT должно быть указано при вызове функции для получения значения по умолчанию. Это поведение отличается от использования параметров со значениями по умолчанию в хранимых процедурах, в которых пропущенный параметр принимает значение по умолчанию.

Я читаю это неправильно?

большое спасибо.

6 87

6 ответов:

значение по умолчанию для параметра хранимых процедур должно быть константы. Вам нужно будет сделать следующее...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

Я не думаю, что это возможно, вы должны использовать литерал (константа) значение по умолчанию.

однако вы можете сделать это:

Set @currentDate = Coalesce(@currentDate , GetDate())

вы можете попробовать следующим образом:

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

Я делаю вывод, что вы используете Microsoft SQL Server из квадратных скобок в вашем примере.

С MSDN:

только постоянное значение, например символьная строка; скалярная функция (системные, пользовательские, или CLR функция); или NULL можно использовать как a по умолчанию.

функции GETDATE() время от времени возвращает другое значение, поэтому оно не является постоянным выражением.

Это значение не является детерминированным и не может быть использована

предложение:

установите значение по умолчанию NULL

сделать по умолчанию GETDATE() в передней части.